我正在尝试创建一个包含现有多维数组的所有值的单个数组。这就是我到目前为止所做的:
function MaxArray($arr) {
foreach ($arr as $value) {
if (is_array($value)) {
MaxArray($value);
} else {
$array[] = $value;
}
}
print_r($array);
}
$arr = array(array(141,151,161), 2, 3, array(101, 202, array(303,404, array(1,2))));
MaxArray($arr);
当我执行此代码时,我从print_r函数获得此响应...
Array ( [0] => 141 [1] => 151 [2] => 161 ) Array ( [0] => 1 [1] => 2 ) Array ( [0] => 303 [1] => 404 ) Array ( [0] => 101 [1] => 202 ) Array ( [0] => 2 [1] => 3 )
正如您所看到的,这不是我想要的,我无法弄清楚如何将多维数组中的所有值组合成一个数组。有人可以指点我在正确的方向吗?
答案 0 :(得分:5)
你要做的事情通常被称为'数字展平',因此ArrayFlatten
可能是一个比MaxArray
更好的函数名称(因为后者听起来像它会返回最高数组中的值,max
表现得非常好。 ArrayFlatten
可以这样写:
function ArrayFlatten($array, $return) {
for ($x = 0; $x < count($array); $x++) {
if(is_array($array[$x])) {
$return = ArrayFlatten($array[$x], $return);
}
else {
if($array[$x]) {
$return[] = $array[$x];
}
}
}
return $return;
}
并像这样使用:
$myarray = array('a','b',array(array(array('x'),'y','z')),array(array('p')));
$res = ArrayFlatten($myarray,array());
要得到这个:
Array ( [0] => a [1] => b [2] => x [3] => y [4] => z [5] => p )
来自here。
答案 1 :(得分:0)
答案 2 :(得分:0)
该函数应该引用结果数组,它永远不会改变。
function flatten($cur, & $result) { ... flatten($x, $result); ... }
答案 3 :(得分:0)
这是另一个变体,用于说明foreach
的使用和保留(某些)字符串键。
function array_flatten($array) {
$rslt = array();
foreach ($array as $key => $val) {
if (is_array($val)) {
$rslt = array_merge($rslt, array_flatten($val));
} elseif (is_int($key)) {
$rslt[] = $val;
} else {
// for string keys, earlier values are overwritten with later ones
$rslt[$key] = $val;
}
}
return $rslt;
}
对于不同的碰撞行为,请更改$rslt[$key] = $val;
行。
答案 4 :(得分:0)
如果您只想输出递归数组的最大值,请使用此
function MaxArray($arr) {
$max = 0;
foreach($arr as $a)
{
if(is_array($a)) {
$max = MaxArray($a);
} else if($a > $max){
$max = $a;
}
}
return $max;
}