当前位置:  开发笔记 > 编程语言 > 正文

获取数组的第一个元素

如何解决《获取数组的第一个元素》经验,为你挑选了22个好方法。

我有一个数组:

array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )

我想得到这个数组的第一个元素.预期结果:字符串 apple

一个要求:通过引用传递不能完成,因此array_shift不是一个好的解决方案.

我怎样才能做到这一点?



1> blueyed..:

原始答案,但代价高昂(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];


这不是有点矫枉过正吗?如果数组包含数千个元素怎么办?为了得到它的第一个元素,创建一个全新的数组是否合理?`list()`和`reset()`对我来说是更好的解决方案.
+1用于巧妙的解决方法,以防止使用array_values()修改原始数组
-1正如上述评论者所说.这令人困惑,这有101个赞成票.
我明白了:严格标准:只能通过引用传递变量.好的解决方法顺便说一下
我同意.与重置和返回当前值的一行相比,总的过度杀伤和非常资源很重:reset($ array);
array_shift(array_slice($ array,0,1))// < - 理论上更快,因为它只考虑第一个元素
这错了!USE echo reset($ arr);
对于array_values解决方案+1,因为它不会修改原始数组
首先,如前所述,它不符合严格标准.如果需要,使用reset()(以及之后的key())是一个更加优雅和高效的选项.
下面的重置(&$ arr)帖子效率更高.
如果输入数组`$ arr`为空,则存在`array_values($ arr)[0]`的偏移问题.
如果我在对原始问题的评论中做出的假设是正确的,那么这个答案就更不正确了.

2> lepe..:

正如迈克指出的那样(最简单的方法):

$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )
echo reset($arr); // Echoes "apple"

如果你想获得密钥:(重置后执行)

echo key($arr); // Echoes "4"

从PHP的文档:

mixed reset(array &$ array);

描述:

reset()将数组的内部指针倒回第一个元素并返回第一个数组元素的值,如果数组为空则返回FALSE.


数组的迭代器被修改.如果你在主题数组的`foreach`中这样做,你就搞砸了.
您是否读过"通过参考传递无法完成"?
@Zenexer和Luke Cousins都不对:1)foreach不使用数组的内部指针 - 而是创建它自己的指针.在foreach中检查调用reset很容易 - 循环将遵循它的方式而不会受到`reset()`的影响.2)不,foreach不会创建阵列的副本!它只创建它自己的指针(甚至不是现有指针的副本 - 它也很容易检查,在foreach之前调用`next()`).
@Zenexer这并不总是(通常)是真的.通常在实践中,`foreach`将复制它循环的数组.

3> Ijas Ameenud..:
$first_value = reset($array); // First element's value
$first_key = key($array); // First element's key

希望这可以帮助.:)


唯一的问题是要求价值的问题,而不是关键.因此应使用current($ array)而不是key($ array)
@zmonteca $ first_value = reset($ array); 在这里你得到值,reset()函数倒带数组内部指针并返回第一个元素.
我实际上没有对它进行测试,但似乎这种方法效率最高.

4> yoda..:
$arr = array( 9 => 'apple', 7 => 'orange', 13 => 'plum' );
echo reset($arr); // echoes 'apple'

如果您不想丢失当前指针位置,只需为该数组创建一个别名.


+1 FYI`reset()`已经返回第一个元素,因此不需要使用`current()` - `echo reset($ arr)`应该足够了

5> Tofeeq..:

current($array)

根据PHP手册,可以获得数组的第一个元素

每个数组都有一个指向其"当前"元素的内部指针,该元素被初始化为插入到数组中的第一个元素.

所以它一直有效,直到你重新定位数组指针,否则你将不得不重置数组.


```current($ array)```只有当数组指针"当前"指向第一个元素时才会起作用,否则```reset($ array)```将是必需的.
似乎`current()`不再需要引用,尽管PHP文档没有反映这一点.所以我认为这已成为最佳解决方案.
我不知道为什么这不是公认的答案,因为它相当简单准确地回答了这个问题.

6> Sergiy Sokol..:

您可以使用语言构造"list"获取第N个元素:

// First item
list($firstItem) = $yourArray;

// First item from an array that is returned from a function
list($firstItem) = functionThatReturnsArray();

// Second item
list( , $secondItem) = $yourArray;

使用array_keys函数,您可以对键执行相同的操作:

list($firstKey) = array_keys($yourArray);
list(, $secondKey) = array_keys($yourArray);


这不对吗?!它只适用于数组键是`int`,尝试`list($ firstItem)= array('key1'=>'value1');`你会得到一个错误`注意:未定义的偏移量:0
澄清:`list($ x)= foo();`相当于`$ x = foo()[0];`.请注意,这不一定与"获取第一项"相同,因为即使是整数索引的数组也可能没有带键0的元素.在我的情况下,我正在做"list($ order)= get_order($ user) ;" 但是"get_order"返回的是由他们的ID键入的命令,这通常不是0.正如@Sergiy所说,array_values()修复了这个问题,但却降低了代码的效率和(更重要的是)可读性.
非常优雅的解决方案,但在数组为空时抛出E_NOTICE.
+1,我认为,`list`是最好的选择
这正是我所做的:`list($ first_value)= $ my_array;`在我看来,这是最好的选择.它没有来自这里提出的其他答案的问题:没有"过度杀伤",因为它没有复制或数组或创建一个新的.没有"引用":数组未被修改.没有"重置":没有更改数组内部指针...

7> 小智..:

PHP 5.4+:

array_values($array)[0];



8> Alex Shester..:

PHP 7.3添加了两个函数,用于直接获取数组的第一个和最后一个键,而无需修改原始数组,也无需创建任何临时对象:

array_key_first

array_key_last

除了具有语义意义外,这些函数甚至不会移动数组指针(就像foreach那样).

拥有密钥后,可以直接通过密钥获取值.


示例(所有这些都需要PHP 7.3+)

获取第一个/最后一个键和值:

$my_array = ['IT', 'rules', 'the', 'world'];

$first_key = array_key_first($my_array);
$first_value = $my_array[$first_key];

$last_key = array_key_last($my_array);
$last_value = $my_array[$last_key];

假设数组不能为空,将第一个/最后一个值作为单行获取:

$first_value = $my_array[ array_key_first($my_array) ];

$last_value = $my_array[ array_key_last($my_array) ];

获取第一个/最后一个值为单行,默认为空数组:

$first_value = empty($my_array) ? 'default' : $my_array[ array_key_first($my_array) ];

$last_value = empty($my_array) ? 'default' : $my_array[ array_key_last($my_array) ];



9> 小智..:

假设:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

只需使用:

$array[key($array)]

得到第一个元素或

key($array)

得到第一把钥匙.

或者,如果要删除它,可以取消第一个链接.


那不是简单地使用"当前"吗?

10> Lee Benson..:

某些阵列不喜欢职能的工作list,resetcurrent.也许它们是"虚假"阵列 - 例如,部分实现ArrayIterator.

如果要拉出第一个值而不管数组,可以使迭代器短路:

foreach($array_with_unknown_keys as $value) break;

然后,您的值将可用,$value并且循环将在第一次迭代后中断.这比将一个可能很大的数组复制到像array_unshift(array_values($ arr))这样的函数更有效.

你也可以这样抓住钥匙:

foreach($array_with_unknown_keys as $key=>$value) break;

如果您从函数中调用它,只需提前返回:

function grab_first($arr) {
    foreach($arr as $value) return $value;
}



11> Gras Double..:

来自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;
}



对于记录,这是我的另一个答案,对于数组的最后一个元素.



12> DiverseAndRe..:

简单地说:

array_shift(array_slice($array,0,1));



13> 小智..:

我愿意echo current($array).



14> 小智..:
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
foreach($arr as $first) break;
echo $first;

输出:

apple



15> 小智..:
$myArray = array (4 => 'apple', 7 => 'orange', 13 => 'plum');
$arrayKeys = array_keys($myArray);

// The first element of your array is:
echo $myArray[$arrayKeys[0]];



16> rustyx..:
$array=array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

$firstValue = each($array)[1];

这比array_values()因为each()函数不复制整个数组要高效得多.

有关详细信息,请参阅http://www.php.net/manual/en/function.each.php


但问题是你应该在之前进行重置,如果内部指针不在开头,你就不会得到第一个元素.

17> William Macd..:

一种愚蠢的方式是:

$foo = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

function get_first ($foo) {
    foreach ($foo as $k=>$v){
        return $v;
    }
}

print get_first($foo);


至少你是诚实的 - 这是kludgy!但是,它有效,我过去一直使用它,直到学习上面的list()技术.

18> tfont..:

大多数这些工作!但是对于快速单线(低资源)呼叫:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $array[key($array)];

// key($array) -> will return the first key (which is 4 in this example)

虽然这很有效,但也很好,请另外看看我的答案:https: //stackoverflow.com/a/48410351/1804013


这相当于使用`current($ array)`,它要求数组的内部指针始终位于第一个元素,在这种情况下,`echo reset($ array)`是最合适的.

19> Adobe..:

获得第一个元素:

array_values($arr)[0]

获取最后一个元素

array_reverse($arr)[0]



20> jmking..:

我认为使用array_values将是您最好的选择。您可以从该函数的结果返回索引零处的值以获取“ apple”。



21> Chris Kempen..:

This is a little late to the game, but I was presented with a problem where my array contained array elements as children inside it, and thus I couldn't just get a string representation of the first array element. By using PHP's current() function, I managed this:

 array('one', 'two'), 7 => array('three', 'four'));
    reset($original);  // to reset the internal array pointer...
    $first_element = current($original);  // get the current element...
?>

Thanks to all the current solutions helped me get to this answer, I hope this helps someone sometime!



22> tfont..:

保持这简单!这里有很多正确的答案,但要尽量减少所有的困惑.这两项工作减少了很多开销.

key($array)=获取数组的第一个键
current($array)=获取数组的第一个值


呃.`current`等于当前元素.您必须将指针重置为数组的开头,以确保它实际上在开头.
推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有