【问题标题】:Why does max(array_push()) not find max?为什么 max(array_push()) 找不到最大值?
【发布时间】:2017-09-08 14:51:32
【问题描述】:

首先,我想澄清一下,我不是在寻找一种解决方法来找到最大值——我已经有了实现该目标的解决方案。我很好奇的是为什么 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()) 不起作用。” -- 你是否好奇地阅读了array_push() 的文档?它返回一个整数:数组中元素的新数量。
  • 实际上,它适用于压入数组的最大值等于压入数组的元素数的所有情况>,嘿嘿!

标签: php arrays max array-push


【解决方案1】:

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

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

参考见:

【讨论】:

  • 还有max($array1[0], $array1[1], $array1[2]) - 你根本不需要费心创建一个新数组。
  • @iainn 除非 OP 打算在代码下方的其他地方使用创建的数组
  • @iainn 我没有意识到我可以为 max() 提供单个索引。这实际上会更有效率。
  • @apokryfos 不,我不打算将 $array2 用于其他任何事情。请参阅我对 iainn 的评论。
  • @apokryfos 谢谢你的解释。我没有注意到手册中提到 array_push() 实际返回的部分。奇怪的是,我曾考虑过选项 3,但认为在简单函数中创建具有规定值的变量(使用“=”)会引发异常。是的,我编程不多。
【解决方案2】:

你也可以使用array_slice():

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

如果

  • 您感兴趣的值按顺序排列
  • 你知道序列的偏移量长度

参考见:

例如,请参阅:

【讨论】:

    猜你喜欢
    • 2018-05-30
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 2020-09-06
    • 1970-01-01
    相关资源
    最近更新 更多