2012-04-30 23 views
0

這是我的數組:搜索在一多維數組的值,並得到其路徑在PHP

$array = array (
'1' => array(
    'title' => 'Level1', 
    'nodes' => array(
    '11' => array('title' => 'sub1_company1'), 
    '12' => array('title' => 'sub2_company1'), 
    '13' => array(
    'title' => 'sub3_company1', 
    'nodes' => array(
     '131' => array('title' => 'item1_sub3_company1'), 
     '132' => array('title' => 'item2_sub3_company1'), 
    ), 
    ), 
), 
), 

'2' => array(
    'title' => 'Level2', 
    'nodes' => array(
    '21' => array('title' => 'sub1_company2'), 
    '22' => array('title' => 'sub2_company2'), 
), 
), 

'3' => array(
    'title' => 'Level3', 
    'nodes' => array(
    '31' => array('title' => 'sub1_company3'), 
    '32' => array(
    'title' => 'sub2_company3', 
    'nodes' => array(
     '321' => array('title' => 'item1_sub2_company3'), 
     '322' => array(
      'title' => 'item2_sub2_company3', 
      'nodes' => array(
      '3221' => array('title' => 'item1_sub3_company3'), 
     ), 
     ), 
    ), 
    ), 
), 
), 
'4' => array('title' => 'Level4'),); 

我需要的是找到sub2_company1並獲得像麪包屑的標題。

1級> sub2_company1

,或者如果我搜索item1_sub3_company1我會得到

1級> sub3_company1> item1_sub3_company1

我做了什麼,但迄今爲止沒有工作:

function breadcrumb($array, $needle) { 
    $path = array(); 

    $array_iterator = new recursiveArrayIterator($array); 
    $it = new recursiveIteratorIterator($array_iterator, RecursiveIteratorIterator::SELF_FIRST); 

    foreach($it as $key => $value) 
    { 
    echo "$key: $value <br>"; 
    if (!is_array($value)) { 
     array_push($path, $value); 
    } 
    if ($value === $needle) { 
     break; 
    } 
    } 

    //$content = '<div id="breadcrumb">' . implode('&nbsp;&#62;&nbsp;', $path) . '</div>'; 

    return print_r($path, 1); 
} 

謝謝

回答

1

您需要再次出現一個函數,而不是一個迭代函數。

function breadcrumb($tree, $needle, &$result = array()) { 

    $result = array(); 

    if (is_array($tree)) { 
     foreach ($tree as $node) { 
      if ($node['title'] == $needle) { 
       $result[] = $node['title']; 
       echo '1-'; 
       return true; 
      } else if (!empty($node['nodes'])) { 
       if (breadcrumb($node['nodes'], $needle, $result)){ 
       echo '2-'; 
       $result[] = $node['title']; 
       return true; 
       } 
      } 
     } 
    } else { 
     if ($tree == $needle) { 
      echo '3-'; 
      $result[] = $tree; 
      return true; 
     } 
    } 
    return false; 
} 

breadcrumb($array, 'item1_sub3_company3', $result); 

print_r($result); 

的麪包屑倒,但你也可以使用array_shift推,你將有正確的方式...