簡體   English   中英

由於 PHP 7.3 `array_unshift()` 只能用一個參數調用。 重點是什么?

[英]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_mergearray_replace+運算符),但它們都有合並和刪除共享鍵的特定方法。 此方法只是將第二個的所有值附加到第一個,而不考慮鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM