Это мой массив:
$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(' > ', $path) . '</div>'; return print_r($path, 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 вместо push, и у вас будет правильный путь …