Php 从多维数组中获取最大值
这是我的多维数组:Php 从多维数组中获取最大值,php,multidimensional-array,max,array-algorithms,Php,Multidimensional Array,Max,Array Algorithms,这是我的多维数组: $arrOrg = [2, 3, [5, 7, 1], 100, [6, 9, [14, 95]], 78]; 我想从这个数组中获得最大值 以下是我迄今为止所尝试的: $highest = 0; function getHighest($arr) { for ($i = 0; $i < count($arr); $i++) { if (is_array($arr[$i])) { getHighest($arr[$i]);
$arrOrg = [2, 3, [5, 7, 1], 100, [6, 9, [14, 95]], 78];
我想从这个数组中获得最大值
以下是我迄今为止所尝试的:
$highest = 0;
function getHighest($arr) {
for ($i = 0; $i < count($arr); $i++) {
if (is_array($arr[$i])) {
getHighest($arr[$i]);
} else {
if ($arr[$i] > $arr[$i + 1]) {
$highest = $arr[$i];
} else {
$highest = $arr[$i + 1];
}
}
}
return $highest;
}
echo getHighest($arrOrg);
$highest=0;
函数getHighest($arr){
对于($i=0;$i$arr[$i+1]){
$highest=$arr[$i];
}否则{
$highest=$arr[$i+1];
}
}
}
返回$high;
}
回音最高($arrog);
但它给出了一个错误的结果:78
你能帮帮我吗?也许是这样的:
$arrOrg = [2, 3, [5, 7, 1], 100, [6, 9, [14, 95]], 78];
$json = json_encode($arrOrg);
$json = str_replace(array('[', ']'), "", $json);
$arr = explode(",", $json);
echo $maximum = max($arr);
在Vahe Galstyan评论后编辑
$arrOrg = array(
2,
3,
array(5, 7, 1),
100,
array(
6,
9,
array(14, 95)
),
78
);
$json = json_encode($arrOrg);
$json = str_replace(array('[', ']'), "", $json);
$arr = explode(",", $json);
echo $maximum = max($arr);
你可以用这个函数来做这个
function getHighest($array) {
foreach($array as $key => $value) {
if (is_array($value)) {
$array[$key] = getHighest($value);
}
}
sort($array);
return array_pop($array);
}
echo getHighest($arrOrg);
您可以使用此方法进行此操作
<?php
$array = [2, 3, [5, 7, 1], 100, [6, 9, [14, 95]], 78];
$highest_value=0;
get_highest_value($array);
function get_highest_value($array){
foreach($array as $val){
if(is_array($val)){
get_highest_value($val);
}else{
if($GLOBALS['highest_value'] < $val){
$GLOBALS['highest_value'] = $val;
}
}
}
}
echo $highest_value; // output 100
不带全局变量,修改数组或进行额外转换:
funcion getMax ($arr) {
$max = null;
foreach ($arr as $act) {
if (is_array ($act)) {
$act = getMax ($act);
}
if ($max == null || act > $max) {
$max = $act;
}
}
return $max;
}
我认为将数组转换为json。。。删除“[”和“]”,然后将字符串重新转换为数组不是查找最大值的算法。无论如何。。。在php中它可以工作。没有几行。我认为这是一个非常好的解决办法
但是我想用这个代码来回答这个问题
$highest = null;
array_walk_recursive($arrOrg, function($item, $key) use (&$highest) {
if (!isset($highest) || $highest < $item) {
$highest = $item;
}
});
echo $highest;
$highest=null;
数组\u walk\u递归($arrog,函数($item,$key)使用(&$highest){
如果(!isset($highest)|$highest<$item){
$highest=$item;
}
});
echo美元最高;
您也可以通过如下所示的数组\u walk\u recursive()和max()来实现它。请检查此处的输出
电流输出是多少?我得到78。最后一个是输出,如果数组是这样的呢$arrOrg=[2,3,数组(5,7,1),100,6,9,14,95],78];哦,好的)我误解了一些事情)不用担心,这是一个很好的解决方案@VaheGalstyan:PHP是一种非常有趣的语言,因为这些东西有点不对劲,但是如果它是一个由所有负数组成的数组呢?谢谢你的问题。@BikashP Sumit目前接受的答案是一种黑客的解决方法,如果数组中有一个键值高于所有其他值,它可能会失败。因此,这个答案是最简洁、聪明、健壮的解决方案,只有两个函数,没有条件。(+1)在Sumit的意愿下,看着它不破裂:
<?php
$arrOrg = [2, 3, [5, 7, 1], 100, [6, 9, [14, 95]], 78];
$oneD = array();
array_walk_recursive($arrOrg,function ($a) use (&$oneD){
$oneD[] = $a;
});
echo "Maximum value = ".max($oneD);