为了账号安全,请及时绑定邮箱和手机立即绑定

从 PHP 7.3 开始,只能使用一个参数来调用 array_unshift() 。重点是什么?

从 PHP 7.3 开始,只能使用一个参数来调用 array_unshift() 。重点是什么?

PHP
侃侃无极 2023-07-21 18:21:35
正如PHP 手册中关于array_unshift()函数所说:7.3.0 现在可以仅使用一个参数来调用该函数。以前,至少需要两个参数。我没明白。如何使用只有一个参数的函数?我试图猜测,但什么也没发生:$arr = ['one' => 'test', 'two' => 'some'];array_unshift($arr);print_r($arr);// Result:// Array// (//    [one] => test//    [two] => some// )$arr1 = ['what', 'ever'];array_unshift($arr1);print_r($arr1);// Array// (//    [0] => what//    [1] => ever// )数组没有改变。有谁知道 PHP 贡献者的具体建议是什么?
查看完整描述

2 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

我认为我的评论可能需要更多解释,希望这能让它更清楚。


如果我有两个数组,并且我想添加从第二个数组到第一个数组末尾的所有元素,array_push与解包运算符结合使用可以让我这样做:


$a = [1, 2, 3];

$b = [4, 5, 6];


array_push($a, ...$b);

$a就是现在[1, 2, 3, 4, 5, 6]


(array_unshift让我做同样的事情,但将元素添加到数组的开头。使用array_push我认为使示例更清晰)


在 PHP 7.3 之前,如果$b为空,则会引发警告,因为解包空数组相当于仅传递第一个参数。请参阅此处的演示: https: //3v4l.org/GZQoo。$a仍然不会改变,这是期望的结果,所以它只是日志中不必要的噪音。


在实际示例中,如果$b是由另一个函数(调用数据库等)生成的,那么如果没有此更改,我需要if (!empty($b) ...在运行代码之前调用以防止出现警告。现在,它默默地工作。


注意:还有其他方法可以将一个数组附加到另一个数组(array_merge、array_replace和+运算符),但它们都有特定的合并和删除重复共享密钥的方法。此方法只是将第二个值的所有值附加到第一个值,而不管键是什么。


查看完整回答
反对 回复 2023-07-21
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

这只是一个猜测,但当函数返回时:


返回数组中新的元素数。


您可以使用它作为count替代方案:


$arr1 = ['what', 'ever'];

print_r(array_unshift($arr1));    // 2

但当然这并不明显。


作为手动的另一个副作用:


所有数字数组键将被修改为从零开始计数


因此,它是以下内容的部分替代array_values:


$arr1 = [4 => 'what', 5 => 'ever'];

array_unshift($arr1);

print_r($arr1);  // [[0] => what [1] => ever]

而且也不是很明显。


也许其他答案会更好地解释这种行为。


array_push()现在也可以array_unshift()用单个参数调用,这特别方便。扩展运算符。


所以,你可以使用类似的东西:


$arr1 = [['what'], ['ever']];

array_unshift(...$arr1);

print_r($arr1);

但这个方法的行为很奇怪o_O:


Array

(

    [0] => Array

        (

            [0] => Array

                (

                    [0] => ever

                )


            [1] => what

        )


    [1] => Array

        (

            [0] => ever

        )


)


查看完整回答
反对 回复 2023-07-21
  • 2 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信