gpt4 book ai didi

php - 使用 min() 获取包含最小值的数组

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:43:19 31 4
gpt4 key购买 nike

min() 的文档显示以下示例:

// Multiple arrays of the same length are compared from left to right
// so in our example: 2 == 2, but 4 < 5
$val = min(array(2, 4, 8), array(2, 5, 1)); // array(2, 4, 8)

给定以下代码:

$input = [
[3, 6],
[2, 9],
];

var_dump(min(...$input)); // returns [2, 9] as expected

如果您使同一个数组具有关联性,它会失败并且似乎总是只返回第一个数组:

$input = [
["three" => 3, "six" => 6],
["two" => 2, "nine" => 9],
];

var_dump(min(...$input)); // returns ["three" => 3, "six" => 6]

为什么?

Here's an example

最佳答案

根据 the documentation使用 standard comparison rules 比较值.

在“与各种类型的比较”表中,它指出如果两个操作数都是数组并且操作​​数 1 中的键不存在于操作数 2 中,则数组不可比较。这就是为什么 min 只返回数组中第一个值的原因。

具体来说,数组比较如下:

  • 如果一个数组的值少于另一个,则它较小。
  • 否则,如果操作数 1 中的任何键不在操作数 2 中,则数组不可比较。
  • 依次对操作数 1 中的每个值,与操作数 2 中具有相同键的值进行比较。
    • 如果相同,继续比较值。
    • 否则较小的数组是具有较小值的数组。

因为它们不可比较,min 只是返回列表中的第一个数组。如果交换顺序,将返回另一个数组。如果您使用 sort($input) 对数组进行排序,您可以看到这一点。每次对它进行排序时,数组都会反转。

要获得您想要的行为,请根据数组的值对数组进行排序,然后获取第一个元素。但请注意,这将取决于您首先定义的键,因此 ["three"=> 3, "six"=> 6] >[“六”=> 6,“三”=> 3]

usort($input, function($a, $b) { return array_values($a) <=> array_values($b); });
var_dump($input[0]);

关于php - 使用 min() 获取包含最小值的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52649908/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com