从 PHP 7.3 开始,只能使用一个参数来调用 array_unshift() 。重点是什么?

正如PHP 手册中关于array_unshift()函数所说:

7.3.0 现在可以仅使用一个参数来调用该函数。以前,至少需要两个参数。

我没明白。如何使用只有一个参数的函数?

我试图猜测,但什么也没发生:

$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

// )

数组没有改变。


有谁知道 PHP 贡献者的具体建议是什么?


侃侃无极
浏览 94回答 2
2回答

阿波罗的战车

我认为我的评论可能需要更多解释,希望这能让它更清楚。如果我有两个数组,并且我想添加从第二个数组到第一个数组末尾的所有元素,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和+运算符),但它们都有特定的合并和删除重复共享密钥的方法。此方法只是将第二个值的所有值附加到第一个值,而不管键是什么。

慕桂英546537

这只是一个猜测,但当函数返回时:返回数组中新的元素数。您可以使用它作为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        ))
打开App,查看更多内容
随时随地看视频慕课网APP