Php 获取深度不确定的多维数组的叶节点值

Php 获取深度不确定的多维数组的叶节点值,php,arrays,recursion,multidimensional-array,filtering,Php,Arrays,Recursion,Multidimensional Array,Filtering,我有这样一个数组: Array ( [23] => 540, [25] => Array ( [656] => Array(671 ,680), [345] => 400 ) ) 我想得到以下值: 540, 671, 680, 400 我的问题是,这个数组正在增长,我不知道它将有多少层深。您可以使用SPL,它的只保留标志 独立示例: <?php $rai = new

我有这样一个数组:

Array
(
    [23] => 540,
    [25] => Array
        (
            [656] => Array(671 ,680),
            [345] => 400
        )
)
我想得到以下值:

540, 671, 680, 400
我的问题是,这个数组正在增长,我不知道它将有多少层深。

您可以使用SPL,它的
只保留
标志

独立示例:

<?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
            )
    );
}
您可以使用SPL及其
仅保留
标志

独立示例:

<?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
            )
    );
}
以下是解决方案:

$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
以下是解决方案:

$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
相关的应该给你答案。相关的应该给你答案。