遍历数组数组的所有值

问题描述:

此问题中的N表示任意大小的任意数字,并不一定(但可以)相同。我有一个具有N个键=>值对的数组。这些键=>值对还可以包含另一个大小为N的数组,其中N个键=>值对。这个数组可以有N个深度,这意味着数组中的任何key =>值对都可以映射到另一个数组。如何获得该数组的所有值(将它们存储在一个新的1维数组中),忽略键键=>值对?遍历数组数组的所有值

array-walk-recursive

抢在yurkowski点网 10月26日 - 2010 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 
*) 
*/ 
+0

虽然这似乎是最好的答案,我唯一的疑虑是,这个功能只能由PHP> = 5.3的支持。但是,这仍然是最好的办法。 – bmarti44 2010-11-05 14:50:33

+0

编辑到我以前的评论,内联PHP和函数只支持PHP> = 5.3。如果此函数仅使用对函数的引用,则它将在较早版本的PHP中起作用。 – bmarti44 2010-11-05 15:42:00

你可以做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); 

相反递归的,使用全局变量和函数,它可以通过循环来完成,但是这只是一个一般的想法,大概需要一点点你的注意,反正。这应该是件好事:)

+1

使用旧版本的PHP,这是最好的解决方案。我会删除全局变量,只是在函数中返回它。 – bmarti44 2010-11-05 14:52:30

+0

@ bmarti44:返回一个数组?或数组元素? – hummingBird 2010-11-05 15:00:29

+0

啊,我看你在这种情况下不能退货。这将返回一个数组元素,你是正确的。 – bmarti44 2010-11-05 15:16:46

在array_values php doc的评论中有很多解决方案。

http://www.php.net/manual/en/function.array-values.php