Php 在数组foreach期间连接字符串,以跟上父值

Php 在数组foreach期间连接字符串,以跟上父值,php,arrays,Php,Arrays,我有一个多维值数组,我正在尝试解析并创建一个父值字符串 我的理想字符串是: Adam Beth Charlie_ Charlie_Mike Charlie_Nancy Charlie_Oscar_ Charlie_Oscar_Peter Charlie_Oscar_Paul Danny 然而,我越来越 Adam Beth Charlie Charlie_Mike_ Charlie_Mike_Nancy_ Char

我有一个多维值数组,我正在尝试解析并创建一个父值字符串

我的理想字符串是:

Adam
Beth
Charlie_
    Charlie_Mike
    Charlie_Nancy
    Charlie_Oscar_
        Charlie_Oscar_Peter
        Charlie_Oscar_Paul

Danny
然而,我越来越

Adam
Beth
Charlie
    Charlie_Mike_
    Charlie_Mike_Nancy_
    Charlie_Mike_Nancy_Oscar
        Charlie_Mike_Nancy_Oscar_Peter_
        Charlie_Mike_Nancy_Oscar_Peter_Paul_
CharlieDanny_
如您所见,当找到新数组时,父值没有清除。此外,
Danny
数组是顶级数组项,不应附加
Charlie

我做错了什么

这是我的密码:

$sufix = "_";
function renderNames(array $data, $name = "")
{
    $html = '<ul>';
    foreach ($data as $item) {
        $html .= '<li>';
        if (array_key_exists('children', $item)) {
            $name .= $item['name'];
            $html .= $name . "<br/>";
            $html .= renderNames($item['children'], $name . $sufix);
        } else {
            if (strlen($name) <= 0) {
                $name = $item['name'];
                $html .= $name . "<br/>";
                $name = "";
            } else {
                $name .= $item['name'] . $sufix;
                $html .= $name . "<br/>";
            }
        }
        $html .= '</li>';
    }
    $html .= '</ul>';
    return $html;
}
函数renderNames(数组$data,$name=”“)
{
$sufix=“"”;
$html=“
    ”; foreach($数据作为$项){ $html.='
  • '; 如果(数组\键\存在('children',$item)){ $name.=$item['name']; $html.=$name.“
    \n”; $html.=renderNames($item['children',$name.$sufix); }否则{ if(strlen($name)
    函数renderNames(数组$data,$name=”“)
    {
    $sufix=“"”;
    $html=“
      ”; foreach($数据作为$项){ $html.='
    • '; 如果(数组\键\存在('children',$item)){ $name.=$item['name']; $html.=$name.“
      \n”; $html.=renderNames($item['children',$name.$sufix); }否则{
      如果(strlen($name)代码的问题是您正在更改每个子级的
      名称
      ,这会导致意外的结果。此外,您可以保存一些条件并以更简单的方式编写代码,如下所示:

      function renderNames(array $data, $name = "")
      {
          $sufix = "_";
          $html = '<ul>';
          foreach ($data as $item) {
              $html .= '<li>';
              $html .= $name . $item['name'] . "<br/>";
              if (array_key_exists('children', $item)) {
                  $html .= renderNames($item['children'], $name . $item['name'] . $sufix);
              }
              $html .= '</li>';
          }
          $html .= '</ul>';
          return $html;
      }
      
      函数renderNames(数组$data,$name=”“)
      {
      $sufix=“"”;
      $html=“
        ”; foreach($数据作为$项){ $html.='
      • '; $html.=$name.$item['name']。“
        ”; 如果(数组\键\存在('children',$item)){ $html.=renderNames($item['children',$name.$item['name'].$sufix); } $html.='
      • '; } $html.='
      '; 返回$html; }
      给你一个


      作为旁注:请记住,列表实际上并不需要

      。代码的问题是您正在更改每个子项的
      名称,这会导致意外的结果。此外,您可以保存一些条件并以更简单的方式编写代码,如下所示:

      function renderNames(array $data, $name = "")
      {
          $sufix = "_";
          $html = '<ul>';
          foreach ($data as $item) {
              $html .= '<li>';
              $html .= $name . $item['name'] . "<br/>";
              if (array_key_exists('children', $item)) {
                  $html .= renderNames($item['children'], $name . $item['name'] . $sufix);
              }
              $html .= '</li>';
          }
          $html .= '</ul>';
          return $html;
      }
      
      函数renderNames(数组$data,$name=”“)
      {
      $sufix=“"”;
      $html=“
        ”; foreach($数据作为$项){ $html.='
      • '; $html.=$name.$item['name']。“
        ”; 如果(数组\键\存在('children',$item)){ $html.=renderNames($item['children',$name.$item['name'].$sufix); } $html.='
      • '; } $html.='
      '; 返回$html; }
      给你一个


      作为旁注:请记住,

      对于列表来说并不是必需的

      非常感谢!您简化了很多!非常感谢!您简化了很多!
      function renderNames(array $data, $name = "")
      {
          $sufix = "_";
          $html = '<ul>';
          foreach ($data as $item) {
              $html .= '<li>';
              $html .= $name . $item['name'] . "<br/>";
              if (array_key_exists('children', $item)) {
                  $html .= renderNames($item['children'], $name . $item['name'] . $sufix);
              }
              $html .= '</li>';
          }
          $html .= '</ul>';
          return $html;
      }