2 回答

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
我認(rèn)為我的評(píng)論可能需要更多解釋,希望這能讓它更清楚。
如果我有兩個(gè)數(shù)組,并且我想添加從第二個(gè)數(shù)組到第一個(gè)數(shù)組末尾的所有元素,array_push與解包運(yùn)算符結(jié)合使用可以讓我這樣做:
$a = [1, 2, 3];
$b = [4, 5, 6];
array_push($a, ...$b);
$a就是現(xiàn)在[1, 2, 3, 4, 5, 6]
(array_unshift讓我做同樣的事情,但將元素添加到數(shù)組的開頭。使用array_push我認(rèn)為使示例更清晰)
在 PHP 7.3 之前,如果$b為空,則會(huì)引發(fā)警告,因?yàn)榻獍諗?shù)組相當(dāng)于僅傳遞第一個(gè)參數(shù)。請參閱此處的演示: https: //3v4l.org/GZQoo。$a仍然不會(huì)改變,這是期望的結(jié)果,所以它只是日志中不必要的噪音。
在實(shí)際示例中,如果$b是由另一個(gè)函數(shù)(調(diào)用數(shù)據(jù)庫等)生成的,那么如果沒有此更改,我需要if (!empty($b) ...在運(yùn)行代碼之前調(diào)用以防止出現(xiàn)警告。現(xiàn)在,它默默地工作。
注意:還有其他方法可以將一個(gè)數(shù)組附加到另一個(gè)數(shù)組(array_merge、array_replace和+運(yùn)算符),但它們都有特定的合并和刪除重復(fù)共享密鑰的方法。此方法只是將第二個(gè)值的所有值附加到第一個(gè)值,而不管鍵是什么。

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊
這只是一個(gè)猜測,但當(dāng)函數(shù)返回時(shí):
返回?cái)?shù)組中新的元素?cái)?shù)。
您可以使用它作為count替代方案:
$arr1 = ['what', 'ever'];
print_r(array_unshift($arr1));? ? // 2
但當(dāng)然這并不明顯。
作為手動(dòng)的另一個(gè)副作用:
所有數(shù)字?jǐn)?shù)組鍵將被修改為從零開始計(jì)數(shù)
因此,它是以下內(nèi)容的部分替代array_values:
$arr1 = [4 => 'what', 5 => 'ever'];
array_unshift($arr1);
print_r($arr1);? // [[0] => what [1] => ever]
而且也不是很明顯。
也許其他答案會(huì)更好地解釋這種行為。
array_push()現(xiàn)在也可以array_unshift()用單個(gè)參數(shù)調(diào)用,這特別方便。擴(kuò)展運(yùn)算符。
所以,你可以使用類似的東西:
$arr1 = [['what'], ['ever']];
array_unshift(...$arr1);
print_r($arr1);
但這個(gè)方法的行為很奇怪o_O:
Array
(
? ? [0] => Array
? ? ? ? (
? ? ? ? ? ? [0] => Array
? ? ? ? ? ? ? ? (
? ? ? ? ? ? ? ? ? ? [0] => ever
? ? ? ? ? ? ? ? )
? ? ? ? ? ? [1] => what
? ? ? ? )
? ? [1] => Array
? ? ? ? (
? ? ? ? ? ? [0] => ever
? ? ? ? )
)
- 2 回答
- 0 關(guān)注
- 147 瀏覽
添加回答
舉報(bào)