数组移位和打印在PHP中的行为

数组移位和打印在PHP中的行为,php,arrays,Php,Arrays,我想在一个简单的例子上测试array\u shift: $a = ['a', 'b', 'c', 'd']; $rem = array_shift($a); print_r($rem); 它只返回我:a,而不是一个数组:['b','c','d'] 在array\u shift上的文档说明以下内容: array_shift()将数组的第一个值移位并返回, 将阵列缩短一个元素,并向下移动所有元素。全部的 数字数组键将被修改为从零开始计数 而文字键不会受到影响 这个函数应该删除第一个元素,并返回所有

我想在一个简单的例子上测试
array\u shift

$a = ['a', 'b', 'c', 'd'];
$rem = array_shift($a);
print_r($rem);
它只返回我:
a
,而不是一个数组:
['b','c','d']

array\u shift
上的文档说明以下内容:

array_shift()将数组的第一个值移位并返回, 将阵列缩短一个元素,并向下移动所有元素。全部的 数字数组键将被修改为从零开始计数 而文字键不会受到影响

这个函数应该删除第一个元素,并返回所有剩余的元素和重新排序的键

现在,我从docs站点原样复制了这个示例(使用
[]
array()
进行了尝试):

现在,这一切如期而至:

Array
(
    [0] => banana
    [1] => apple
    [2] => raspberry
)
我不明白这里发生了什么,我做错了什么

我的示例只在变量名和数组中的元素上有所不同

我几乎不相信这个问题是因为我使用了单引号

另外,这里还有一个。

array\u shift()
是一个独立函数-您不需要将其赋值,它会自动将其从给定变量中取消设置:

<?php
    $a = ['a', 'b', 'c', 'd'];
    array_shift($a);
    print_r($a);

在您的示例中,
$rem
是从函数
数组_shift
返回的值,如文档中所述,它将在打印时在另一侧返回已消除的索引值

 print_r($a);
这将在执行函数后返回数组

array\u shift()
将数组的第一个值移位并返回它

“it”指的是“第一个值”,而不是“数组”。它移开第一个值并返回所述第一个值;该过程缩短了阵列的长度。请密切注意示例代码(
$fruit
)中返回的内容以及打印的内容(
$stack

要保持原始数组不变并返回新的较短数组,请执行以下操作:

$rem = array_slice($a, 1);
如php文档所示

array\u shift
的返回结果是被移位的数组的第一个值,并删除原始数组的第一个值

array_shift()将数组的第一个值移位并返回, 将阵列缩短一个元素,并向下移动所有元素。全部的 数字数组键将被修改为从零开始计数 而文字键不会受到影响


对现在我明白了。它是通过引用传递的,因此文档说:
array\u shift(array&$array):mixed
。谢谢。在第二个示例中,您正在打印$stack,而在第一个示例中,您正在打印$rem。它返回第一个值,并修改实际数组。@AjayKumar Yes。在PHP的
通过引用传递的世界中,这些事情可能会发生:)现在我不能删除这个问题:)请仔细阅读。array_shift()返回第一个元素并将其从数组中移除。数组本身已更改,但您将收到元素。
$rem = array_slice($a, 1);
array_shift ( array &$array ) : mixed