如何在PHP中获取2d数组中最大元素的键
示例数组如何在PHP中获取2d数组中最大元素的键,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,示例数组 $array[0][0] = 5323; $array[0][1] = 5346; $array[0][2] = 5424; $array[1][0] = 6000; $array[1][1] = 5412; $array[1][2] = 5543; $array[2][0] = 5651; $array[2][1] = 7000; $array[2][2] = 5254; 所以这个数组中最大的元素的值是7000; 如何获取他的密钥X和Y?(如$array[X][Y]中所示,在本例中
$array[0][0] = 5323;
$array[0][1] = 5346;
$array[0][2] = 5424;
$array[1][0] = 6000;
$array[1][1] = 5412;
$array[1][2] = 5543;
$array[2][0] = 5651;
$array[2][1] = 7000;
$array[2][2] = 5254;
所以这个数组中最大的元素的值是7000;
如何获取他的密钥X和Y?(如$array[X][Y]中所示,在本例中为X=2和Y=1) 当您获得新的最大值时,您可以在数组中循环并保存xy 我以可能的最小值开始max,然后它循环数组,如果值大于先前的max,则更新变量
$max = PHP_INT_MIN;
foreach($array as $key => $subarray){
foreach($subarray as $subkey => $value){
if($value > $max){
$x = $key;
$y = $subkey;
$max = $value;
}
}
}
一种方法是为当前数组创建一个字符串,然后创建 字符串中所有值的数组,并使用数组上的PHP本机函数max获取最大值:
$na = '';
foreach($array as $arr) {
$na .= implode(',',$arr) . ',';
}
$max_value = max(explode(',',$na));
foreach($array as $x=>$arr) {
$y = array_search($max_value, $arr);
if ($y !== false) break;
}
然后你会有$x、$y和$max_的值,谢谢。有比O(n^2)时间复杂度更好/更快的方法吗?在O(nlog(n))中有什么方法可以做到这一点吗?这个方法循环遍历所有值一次。你不可能做得比那更快。我不太明白为什么会是n^2。你确定你理解代码了吗?这种方法很有趣,但我认为把它分解成字符串,然后转换回数组,然后搜索新数组太浪费时间了。一定有某种方法可以按原样搜索数组。通过正确地使用max()使其在2d数组中给出正确的结果,或者如果不可能,则使用不同的function@leyanes212-max()仅适用于一维数组。另一种方法是Andreas提供的方法:-)这种方法的好处是,当找到密钥时,它可以打破循环。缺点是可能会有一个很长的字符串($na),如果它是一个非常大的数组,可能不容易处理。这种方法的好处是,当找到密钥时,它可能会中断循环。但这是第三次处理该值。首先你把它做成一个字符串,然后是一个数组,只有在第三次你才能“打破”这个循环。@Andreas-这是完全正确的!我认为这取决于数组的大小。也许这会有好处,也许不会。我只是在寻找另一种解决方案。-)如果能在处理时间和阵列大小方面进行一些比较,那就太酷了:-)现在在这个星球上,只要地球绕着太阳转,就有办法将相同的值处理三次。您可以自己创建这样一个示例。