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和+运算符),但它们都有特定的合并和删除重复共享密钥的方法。此方法只是将第二个值的所有值附加到第一个值,而不管键是什么。
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
)
)
- 2 回答
- 0 关注
- 92 浏览
添加回答
举报