你会选择哪个?
基本上我只想从一个数组中获取第一个元素,仅此而已。
它们做的事情不同。
array_shift($arr)
从数组中取出第一个元素并返回给你。
$arr[0]
只是直接返回它... 如果 数组的键名是数字。
适用于关联数组和数字键名的另一种替代方法是reset($arr)
。这确实会移动数组的内部指针,但除非你在使用那些函数,否则这不太可能影响你。
array_shift
函数将从数组中删除指定的值。除非您确实想缩小数组,否则不要使用它!
$arr[ 0 ];
。 array_shift
从数组中删除第一个元素。
这个答案实际上在不完整和错误之间,但由于两个jon
的评论,我认为它应该留下来,以便其他人可以看到这种讨论。
正确的答案:
reset
是返回数组的第一个定义索引的方法。 即使在非关联数组中,这也可能不是0
索引。array_shift
将删除并返回在reset
中找到的值OP做出的假设$arr[0]
是第一个索引,在特定上下文中并不准确。
<?php
foreach($arr $k=>$v){
$value = $v;
break;
}
<?php
reset($arr);
$value = current($arr);
如果你有一个关联数组,你也可以使用reset($arr)
:它返回第一个元素(不会删除),并将数组指针设置为该元素。
但最快的方法是使用$arr[0]
。
如果您不想更改所讨论的数组,请使用$arr[0]
(仅获取第一个元素),否则,如果您想从$arr
中删除第一个元素并将其从$arr
中移除,请使用array_shift($arr)
。
例如:
$arr=array(3,-6,2);
$foo=$arr[0]; //$foo==3 and $arr==array(3,-6,2).
$bar=array_shift($arr); //$bar==3 and $arr==array(-6,2).
预计时间:正如其他人所指出的那样,请确保您的数组不是关联数组(即键为0,1,...,(sizeof($arr)-1)
),否则这可能不起作用。
你想同时修改 arr
数组吗?array_shift
移除数组的第一个元素并返回它,因此数组已经改变了。$arr[0]
只是给出了第一个元素。
我会使用 $arr[0]
,除非我明确想要修改数组。你可能会在后面添加代码来使用 arr
数组,而忘记它已经被修改了。
根据你的需要,$arr[0] 更好,因为它更快。array_shift 用于其他情况。
arrshift更可靠,它总是返回数组中的第一个元素,但这也通过删除该元素来修改数组。
如果您的数组不从0索引开始,则arr [0]将失败,但不会影响数组本身。
一种更复杂但更可靠的方法是:
$keys = array_keys($arr);
$first = $arr[$keys[0]];
array('foo' => 'bar')
或 array(1 => 1, 0 => 0)
的可破坏性。 - Jon$arr
的第一个元素,请使用$arr[0]
。但是,只有当第一个元素具有键0
时才能这样做。 这可能不会误导人,但也不是非常有用。为什么不让它变得更有用呢? :) - Jon
$first = reset($array);
是你想要的。它可以正确地处理你输入的任何内容。 - Jon