У меня есть такой массив:
Array ( [23] => 540, [25] => Array ( [656] => Array(671 ,680), [345] => 400 ) )
Я хочу получить значения:
540 , 671 ,680 , 400
Для меня проблема в том, что этот массив растет, а незнать, сколько уровней глубоко,
Вы можете использовать SPL RecursiveArrayIterator и RecursiveIteratorIterator с его флагом LEAVES_ONLY.
RecursiveArrayIterator
RecursiveIteratorIterator
LEAVES_ONLY
автономный пример:
<?php $rai = new RecursiveArrayIterator(getData()); // $rii = new RecursiveIteratorIterator($rai, RecursiveIteratorIterator::LEAVES_ONLY) - but this is the default $rii = new RecursiveIteratorIterator($rai); foreach($rii as $n) { echo $n, "\n"; } // test data source function getData() { return array( 23 => 540, 25 => array( 656 => array(671,680), 345 => 400 ) ); }
отпечатки
540 671 680 400
вот решение:
$array = array ( 23 => 540, 25 => array ( 656 => array(671,680), 345 => 400 ) ); var_dump($array); $result = array(); function fn($item, $key){ global $result; if (!is_array($item)){ $result[] = $item; } } array_walk_recursive($array, 'fn'); var_dump($result);
и результат
array 23 => int 540 25 => array 656 => array 0 => int 671 1 => int 680 345 => int 400 array 0 => int 540 1 => int 671 2 => int 680 3 => int 400