从未知深度的多维数组递归生成所有值/叶节点的平面索引数组

问题描述 投票:0回答:2
这个问题中的

N表示任何大小的任意数字,并且不一定(但可能)相同。我有一个包含 N 个键 => 值对的数组。这些 key => value 对还可以包含另一个大小为 N 的数组,其中包含 N 个 key => value 对。该数组的深度可以是 N,这意味着数组中的任何键 => 值对都可以映射到另一个数组。

如何获取该数组的所有值(将它们存储在新的一维数组中),忽略 key => value 对中的键?

php arrays recursion multidimensional-array traversal
2个回答
2
投票

数组遍历递归

在 yurkowski 点网抢劫 2010 年 10 月 26 日 06:16

如果你真的不特别 关心数组的键,你 可以非常简单地捕获所有值:

$sample = array(
    'dog' => 'woof',
    'cat' => array(
        'angry' => 'hiss',
        'happy' => 'purr'
    ),
    'aardvark' => 'kssksskss'
);

$output = array();

// Push all $val onto $output. 
array_walk_recursive($sample, create_function('$val, $key, $obj', 'array_push($obj, $val);'), &$output);
// Printing echo nl2br(print_r($output, true));

/*
 * Array
 * (
 *  [0] => woof
 *  [1] => hiss
 *  [2] => purr
 *  [3] => kssksskss
 * )
 */

1
投票

你可以像这样做smt:

$output = array();

function genArray( $arr ) {
    global $output;
    foreach( $arr as $key => $val ) {
        if( is_array($val) ) 
            genArray( $val );
        else
            output[$key] = $val;
    }
}

genArray( $myArray );

使用全局变量和函数代替递归,可以通过循环来完成,但这只是一个一般想法,无论如何,可能需要你的一些注意。这应该是一件好事:)

© www.soinside.com 2019 - 2024. All rights reserved.