Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.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 使用min()获取包含最小值的数组_Php_Arrays - Fatal编程技术网

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

Php 使用min()获取包含最小值的数组,php,arrays,Php,Arrays,的文档显示了以下示例: // 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 = [ ["three"

的文档显示了以下示例:

// 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 = [
    ["three" => 3, "six"  => 6],
    ["two"   => 2, "nine" => 9],
];

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


只需将它们转换为简单数组,然后返回与min结果关联的关联数组

<?php

function array_min_assoc(){
  $args = func_get_args();
  $not_assoc = array_map('array_values',$args);
  $min = min(...$not_assoc);

  $key = array_search($min, $not_assoc);
  if ($key !== false){
    return $args[$key];
  }

}

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

var_dump(array_min_assoc(...$input)); 
/* returns
array(2) {
  ["two"] => int(2)
  ["nine"]=> int(9)
}
*/
根据使用的值进行比较

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

具体而言,阵列的比较如下所示:

  • 如果一个数组的值比另一个数组的值少,则该数组较小
  • 否则,如果操作数1中的任何键不在操作数2中,则数组不可编译
  • 依次对操作数1中的每个值,与操作数2中具有相同键的值进行比较。
    • 如果相同,则继续比较值
    • 否则,较小的数组就是具有较小值的数组
因为它们不可比较,
min
只是返回列表中的第一个数组。如果交换订单,将返回另一个数组。如果使用
sort($input)
对数组进行排序,可以看到这一点。每次排序时,数组都会反转

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

usort($input, function($a, $b) { return array_values($a) <=> array_values($b); });
var_dump($input[0]);
usort($input,function($a,$b){返回数组_值($a)数组_值($b);});
var_dump($input[0]);

对于splat操作员。不确定这是否是问题所在…数组不是关联的(子数组是关联的,但不是传递给
min()
)的数组)啊,对了<代码>:)
“多个非数字字符串值将以字母数字进行比较”,因此可能会比较“三”和“二”,而“三”在“二”之前。我试图通过保留键并更改2和3值(键“三”的值为2,键“二”的值为3)来更改您的示例->它仍然使用键“三”返回数组,当然,谢谢!我认为混淆源于文档中的措辞“…从左到右比较”,而不是仅仅说明使用标准数组比较来比较它们
usort($input, function($a, $b) { return array_values($a) <=> array_values($b); });
var_dump($input[0]);