我有一个数组:
阵列(4 = > '苹果',7 = >“橙色”,13 = >“李子”)
我想要得到这个数组的第一个元素。预期结果:串苹果
一个要求:它不能通过引用传递来完成,所以array_shift不是一个好的解决方案。
我该怎么做呢?
我有一个数组:
阵列(4 = > '苹果',7 = >“橙色”,13 = >“李子”)
我想要得到这个数组的第一个元素。预期结果:串苹果
一个要求:它不能通过引用传递来完成,所以array_shift不是一个好的解决方案。
我该怎么做呢?
当前回答
来自Laravel的助手:
function head($array)
{
return reset($array);
}
数组是按值传递给函数的,reset()会影响数组副本的内部指针,而不会触及原始数组 数组(注意,如果数组为空,则返回false)。
使用的例子:
$data = ['foo', 'bar', 'baz'];
current($data); // foo
next($data); // bar
head($data); // foo
next($data); // baz
这里还有一个选择。它稍微快一点,但更有趣。如果数组为空,它可以很容易地更改默认值:
function head($array, $default = null)
{
foreach ($array as $item) {
return $item;
}
return $default;
}
为了记录,这是我的另一个答案,对于数组的最后一个元素。
其他回答
Use:
$first = array_slice($array, 0, 1);
$val= $first[0];
默认情况下,array_slice不保留键,所以我们可以安全地使用0作为索引。
PHP 5.4 +:
array_values($array)[0];
这是一个结合了array_slice和implode的例子:
$arr = array(1, 2, 3);
echo implode(array_slice($arr, 0, 1));
// Outputs 1
/*---------------------------------*/
$arr = array(
'key_1' => 'One',
'key_2' => 'Two',
'key_3' => 'Three',
);
echo implode(array_slice($arr, 0, 1));
// Outputs One
原来的答案,但代价高昂(O(n)):
array_shift(array_values($array));
在O (1):
array_pop(array_reverse($array));
其他用例,等等……
如果修改(在重置数组指针的意义上)$array不是一个问题,你可以使用:
reset($array);
如果需要数组“copy”,理论上这应该更有效:
array_shift(array_slice($array, 0, 1));
使用PHP 5.4+(但如果为空可能会导致索引错误):
array_values($array)[0];
来自Laravel的助手:
function head($array)
{
return reset($array);
}
数组是按值传递给函数的,reset()会影响数组副本的内部指针,而不会触及原始数组 数组(注意,如果数组为空,则返回false)。
使用的例子:
$data = ['foo', 'bar', 'baz'];
current($data); // foo
next($data); // bar
head($data); // foo
next($data); // baz
这里还有一个选择。它稍微快一点,但更有趣。如果数组为空,它可以很容易地更改默认值:
function head($array, $default = null)
{
foreach ($array as $item) {
return $item;
}
return $default;
}
为了记录,这是我的另一个答案,对于数组的最后一个元素。