Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中获取2d数组中最大元素的键_Php_Arrays_Multidimensional Array - Fatal编程技术网

如何在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-这是完全正确的!我认为这取决于数组的大小。也许这会有好处,也许不会。我只是在寻找另一种解决方案。-)如果能在处理时间和阵列大小方面进行一些比较,那就太酷了:-)现在在这个星球上,只要地球绕着太阳转,就有办法将相同的值处理三次。您可以自己创建这样一个示例。