Php 尝试从多维(递归)数组中提取所有值

Php 尝试从多维(递归)数组中提取所有值,php,arrays,Php,Arrays,我试图创建一个包含现有多维数组所有值的单个数组。这就是我到目前为止所做的: function MaxArray($arr) { foreach ($arr as $value) { if (is_array($value)) { MaxArray($value); } else { $array[] = $value; } } print_r($array); } $a

我试图创建一个包含现有多维数组所有值的单个数组。这就是我到目前为止所做的:

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 ) 

正如您所看到的,这不是我想要的,我不知道如何将多维数组中的所有值组合到一个数组中。有人能在这里给我指出正确的方向吗?

您尝试做的通常被称为“数组展平”,因此ArrayFlatten可能是比MaxArray更好的函数名称,因为后者听起来好像会返回数组中的最高值,这非常好。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 )
From.

您尝试执行的操作通常被称为“数组展平”,因此ArrayFlatten可能是比MaxArray更好的函数名称,因为后者听起来像是返回数组中的最高值,这非常好。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 )
从。

$array将在每次执行MaxArray时重新创建和打印。您需要在所有递归执行中构建它。我认为最好的方法是让MaxArray函数返回该数组,而不是将其打印出来。。。当我输入这个时,多米尼克·罗杰刚刚为你做了

在每次执行MaxArray时都会重新创建并打印$array。您需要在所有递归执行中构建它。我认为最好的方法是让MaxArray函数返回该数组,而不是将其打印出来。。。当我输入这个时,多米尼克·罗杰刚刚为你做了

函数应该引用结果数组,该数组永远不会更改

function flatten($cur, & $result) { ... flatten($x, $result); ... }

下面是一个示例:

函数应该引用结果数组,该数组永远不会更改

function flatten($cur, & $result) { ... flatten($x, $result); ... }

这里有一个例子:

这里有另一个变体,说明了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;行。

这里是另一个变体,说明了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;行。

如果只想输出递归数组的最大值,请使用

function MaxArray($arr) {
  $max = 0;
  foreach($arr as $a)
  {
   if(is_array($a)) {
     $max = MaxArray($a);
   } else if($a > $max){
     $max = $a;
   }
 }
 return $max;
}

如果只想输出递归数组的最大值,请使用

function MaxArray($arr) {
  $max = 0;
  foreach($arr as $a)
  {
   if(is_array($a)) {
     $max = MaxArray($a);
   } else if($a > $max){
     $max = $a;
   }
 }
 return $max;
}

感谢您的快速回复,您的功能运行得非常好,只是它显示了一系列类似于以下的通知错误。。。注意:第16行未定义的偏移量:3 in/Users/Devin/Sites/mywebapp/query.php知道是什么导致了这些错误吗?$x@Dominic:make$return为了效率起见通过引用传递。您还可以为$return设置数组的默认值,以简化使用。感谢您的快速回复,您的函数工作得非常好,只是它显示了一系列类似以下的注意错误。。。注意:第16行未定义的偏移量:3 in/Users/Devin/Sites/mywebapp/query.php知道是什么导致了这些错误吗?$x@Dominic:make$return为了效率起见通过引用传递。您还可以为$return设置默认值array,以简化使用。