为什么 max(array_push()) 找不到最大值?

Why does max(array_push()) not find max?

首先,我想澄清一下,我不是寻找解决方法来找到最大值——我已经有了实现该目标的解决方案。我很好奇的是 为什么 max(array_push()) 不起作用。

我有一个包含很多值的数组,我想在该数组中找到特定值的最大值。现有数组:

$array1 = array(2,6,1,'blue','desk chair');

基本思想是创建一个由这些指定值组成的新数组,然后找到该新数组的最大值。我试图使这项工作全部在一条线上进行:

$max = max(array_push($array2, $array1[0], $array1[1], $array1[2]));
//this doesn't work at all, since $array2 doesn't already exist, as per the PHP manual

我改成先创建$array2的代码,但是当时并没有赋值,只是看看代码能不能运行

$array2 = array();
$max = max(array_push($array2, $array1[0], $array1[1], $array1[2]));
//$array2 is populated, but $max is not assigned

显而易见的解决方案是在创建时为 $array2 赋值,然后单独使用 max()。我很好奇为什么 max(array_push()) 找不到最大值,因为复合函数通常从内到外运行。

谢谢。

max 需要一个数组来处理,但是 array_push returns 一个整数并且实际上通过引用使用提供的数组,你必须这样做:

$array2 = array();
array_push($array2, $array1[0], $array1[1], $array1[2])
$max = max($array2);

或者:

$array2 = array($array1[0], $array1[1], $array1[2]);
$max = max($array2);

第三个选项(虽然不是最干净的一个):

$array2 = array();
$max = max($array2 = array_merge($array2, [$array1[0], $array1[1], $array1[2]]));

参考:

您也可以使用 array_slice():

$max = max(array_slice(
    $array1,
    0,
    3
));

如果

  • 您感兴趣的值在一个序列中
  • 你知道序列偏移量长度

参考:

有关示例,请参阅: