2017-12-01 22 views
1

私は多値配列の値を解析して親値の文字列を作成しています。配列foreach中に文字列を連結し、親値を維持します。

私の理想の文字列は次のようになります。あなたは新しい配列が発見された場合、親の値が一掃されていない見ることができるように

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; 
} 

私が参考にSO Questionを使用しました。しかし、私は配列を作成したくないです、私は値から文字列を作成したいと思ってここで私は入力が重複していると尋ねました。

$aFullArray = array(); 
$aFullArray[] = array("name" => "Adam", "address" => "123 main", "phone" => "000-000-0000"); 
$aFullArray[] = array("name" => "Beth", "address" => "123 main", "phone" => "000-000-0000"); 

$aChildren = array(); 
$aChildren [] = array("name" => "Mike", "address" => "123 main", "phone" => "000-000-0000"); 
$aChildren[] = array("name" => "Nancy", "address" => "123 main", "phone" => "000-000-0000"); 


$subChild = array(); 
$subChild [] = array("name" => "Peter", "address" => "123 main", "phone" => "000-000-0000"); 
$subChild [] = array("name" => "Paul", "address" => "123 main", "phone" => "000-000-0000"); 

$aChildren [] = array("name"  => "Oscar", "address" => "123 main", "phone" => "000-000-0000", 
           "children" => $subChild); 

$aFullArray[] = array("name"  => "Charlie", "address" => "123 main", "phone" => "000-000-0000", 
           "children" => $aChildren); 

$aFullArray[] = array("name" => "Danny", "address" => "123 main", "phone" => "000-000-0000"); 

答えて

1

をあなたのコードに問題が予期しない結果につながるそれぞれの子供たちのためにnameを変更している次のとおりです。ここで

は、私が使用してい配列です。あなたはサイドノートとしてworking example

を持っている。ここ

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; 
} 

<br/>は本当にない心であなたをキープ。また、あなたはこのように、簡単な方法で、いくつかの条件文を保存し、コードを書くことができリストに必要です

+0

ありがとうございます!あなたはそれをたくさん単純化しました! –

+0

あなたは大歓迎です! – Piyin

-1
function renderNames(array $data, $name = "") 
    { 
     $sufix = "_"; 
     $html = '<ul>'; 
     foreach ($data as $item) { 
      $html .= '<li>'; 
      if (array_key_exists('children', $item)) { 
       $name .= $item['name']; 
       $html .= $name . "<br/>\n"; 
       $html .= renderNames($item['children'], $name . $sufix); 
      } else { 
       if (strlen($name) <= 0) { 
        $name = $item['name']; 
        $html .= $name . "\n"; 
        $name = ""; 
       } else { 
        $aux = $name . $item['name'] . $sufix; 
        $html .= $aux . "\n"; 
       } 
      } 
      $html .= '</li>'; 
     } 
     $html .= '</ul>'; 

     return $html; 

    } 
関連する問題