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] = 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
是二维数组,请执行以下操作:

  • 对于不同长度的多个数组,max返回最长的

    $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
    )