[英]Since PHP 7.3 `array_unshift()` can be called with only one parameter. What's the point?
正如PHP 手冊中關於array_unshift()
function 所說:
7.3.0 這個 function 現在可以只用一個參數調用。 以前,至少需要兩個參數。
我沒明白。 如何使用只有一個參數的 function?
我試圖猜測,但沒有任何反應:
$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
// )
arrays 沒有改變。
有誰知道 PHP 貢獻者的具體建議是什么?
這只是一個猜測,但隨着 function 返回:
返回數組中元素的新數量。
您可以將其用作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]
而且也不明顯。
另外,也許其他答案會更好地解釋這種行為。
另外,感謝@NigelRen,在官方手冊中您可以閱讀
現在也可以使用單個參數調用
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
)
)
我認為我的評論可能需要更多解釋,希望這能讓它更清楚。
如果我有兩個 arrays,並且我想添加從第二個到第一個末尾的所有元素,使用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
是由另一個 function(調用數據庫等)生成的,那么如果沒有此更改,我需要在運行代碼之前調用if (.empty($b)...
以防止出現警告. 現在,它默默地工作。
注意:還有其他方法可以將一個數組附加到另一個數組( array_merge
、 array_replace
和+
運算符),但它們都有合並和刪除共享鍵的特定方法。 此方法只是將第二個的所有值附加到第一個,而不考慮鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.