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) ...在運行代碼之前調用以防止出現警告?,F在,它默默地工作。
注意:還有其他方法可以將一個數組附加到另一個數組(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 關注
- 141 瀏覽
添加回答
舉報