理解PHP中2d数组搜索的问题
下面是一个简单的二维数组,其中包含一些值理解PHP中2d数组搜索的问题,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,下面是一个简单的二维数组,其中包含一些值 $array[0][0] = 1; $array[0][1] = 2; $array[1][0] = 3; $array[1][1] = 4; 我想找到具有最大值的数组元素的键 这是返回密钥的代码: $index = array_search(max($array), $array); 它工作正常,但只返回键的“最后”部分。 所以在我的数组中,最大值(4)的元素是$array[1][1],所以$index返回1,我知道它是该元素的键,但是我怎么知道这
$array[0][0] = 1;
$array[0][1] = 2;
$array[1][0] = 3;
$array[1][1] = 4;
我想找到具有最大值的数组元素的键
这是返回密钥的代码:
$index = array_search(max($array), $array);
它工作正常,但只返回键的“最后”部分。
所以在我的数组中,最大值(4)的元素是$array[1][1],所以$index返回1,我知道它是该元素的键,但是我怎么知道这是元素[0][1]还是[1][1],因为这两个元素都有键[1]?
我如何获得“complete”键([1][1]),所以在我的例子中[1]和[1]都是
我想我在多维PHP数组的工作方式上遗漏了一些东西,我希望有人能帮助我理解它们
更新#2
现在我对max()更为困惑。我试过了
$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;
var_dump(max($array));
它返回subbaray,它没有像我预期的那样将7000作为结果之一。毕竟这是这个数组中的最大值,所以现在我完全糊涂了。您的示例数据中有8个索引,其中一半是
1
,因此获取1
并不能证明任何东西都是有效的
让我们拆分您的代码:
max($array)
由于$array
是二维数组,请执行以下操作:
$val = max(array(2, 2, 2), array(1, 1, 1, 1)); // array(1, 1, 1, 1)
$val = max(array(2, 4, 8), array(2, 5, 1)); // array(2, 5, 1)
[3,4]
,因为1
小于3
。请比较:
$array[0][0] = 1;
$array[0][1] = 9999999;
$array[1][0] = 3;
$array[1][1] = 4;
print_r(max($array));
因此,您选择了一个子阵列,遵循的规则不一定符合您的规格。由于您的示例数据,您的代码工作纯属偶然。如果说$array[0][1]=7;,在max($array)中仍然可以得到[3,4]。我希望您了解max with Array的工作原理。array_search返回由max()选择的子数组的索引不,我不明白在那个例子中,我怎么能得到[3,4]作为max的结果。当我使用max($array)时,我只得到key,所以如果元素是$array[43][54],我得到的是键的“54”部分,但我还需要“43”部分、父键或任何可以调用的东西,我不知道如何得到它。set
$array[0][0]=5$数组[0][1]=7代码>将得到0,但不是预期的1。打印max($array)
以查看它返回的内容。因此,在我的示例中,$index不会返回键的最后一部分,而是第一部分。我现在明白了,但不明白它是怎么做到的,也不知道如何得到第二部分的钥匙?我现在看到max()返回数组,每个“列”都有最大值,这是我要查找的键的第二部分,但现在我太纠结了,我不知道如何组合以获得该元素的完整键([x][y]),以及当指针参数为array时,array_search如何只返回一个结果(max()的返回)现在我对max()更为困惑。我尝试了$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代码>变量转储(最大($array))代码>并返回subbaray,它没有像我预期的那样将7000作为结果之一。毕竟这是这个数组中的最大值,所以现在我完全困惑了。现在我明白了,在我的示例中,$index不返回键的“最后一部分”,而是返回第一部分(它从$array[X][y]返回X)。那么如何获取该键的第二部分,Y?它返回键的唯一部分,因为您不再在完整数组中搜索,而是在任意子数组中搜索(不一定是具有最大值的子数组)。在我的示例中,first max(array)为我提供了每个列具有最大值的子数组,其中列键为键。在该数组之后,搜索使用该子数组作为指针在数组中搜索,并返回什么的键。。。?现在我不明白array_search在这里查找和找到了什么。这是否意味着这个代码不能满足我的需求?如果没有,我如何在$array中同时获得X和Y[X][Y]作为$array中的最大值“给我每个列都有最大值的子数组”不,它没有。我在回答中对此进行了解释(要点1和2)。“子数组作为指针在数组中搜索并返回什么键…”大原始数组中该子数组的键。“这是不是意味着这段代码没有给我想要的东西?”至于“完全是偶然的”我的基本意思是:它对这个数据集有效,但对其他所有东西都是错误的。这就像用$a+$b
计算乘法,然后用1和1进行测试。哦,好吧,问题是max()在2d数组上使用时不会给我最大值的元素?或者代码的其他部分是问题所在?找到具有最大值的二维数组元素的正确方法是什么?(如果可能,没有时间复杂度为O(n^2)的双循环)
Array
(
[0] => 3
[1] => 4
)
$array[0][0] = 1;
$array[0][1] = 2;
$array[1][0] = 0;
$array[1][1] = 9999999;
print_r(max($array));
Array
(
[0] => 1
[1] => 2
)