我有一个数组:
array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )
我想得到这个数组的第一个元素.预期结果:字符串 apple
一个要求:通过引用传递不能完成,因此array_shift
不是一个好的解决方案.
我怎样才能做到这一点?
原始答案,但代价高昂(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];
正如迈克指出的那样(最简单的方法):
$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.
$first_value = reset($array); // First element's value $first_key = key($array); // First element's key
希望这可以帮助.:)
$arr = array( 9 => 'apple', 7 => 'orange', 13 => 'plum' ); echo reset($arr); // echoes 'apple'
如果您不想丢失当前指针位置,只需为该数组创建一个别名.
current($array)
根据PHP手册,可以获得数组的第一个元素
每个数组都有一个指向其"当前"元素的内部指针,该元素被初始化为插入到数组中的第一个元素.
所以它一直有效,直到你重新定位数组指针,否则你将不得不重置数组.
您可以使用语言构造"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);
PHP 5.4+:
array_values($array)[0];
PHP 7.3添加了两个函数,用于直接获取数组的第一个和最后一个键,而无需修改原始数组,也无需创建任何临时对象:
array_key_first
array_key_last
除了具有语义意义外,这些函数甚至不会移动数组指针(就像foreach
那样).
拥有密钥后,可以直接通过密钥获取值.
$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) ];
假设:
$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
只需使用:
$array[key($array)]
得到第一个元素或
key($array)
得到第一把钥匙.
或者,如果要删除它,可以取消第一个链接.
某些阵列不喜欢职能的工作list
,reset
或current
.也许它们是"虚假"阵列 - 例如,部分实现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; }
来自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; }
对于记录,这是我的另一个答案,对于数组的最后一个元素.
简单地说:
array_shift(array_slice($array,0,1));
我愿意echo current($array)
.
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' ); foreach($arr as $first) break; echo $first;
输出:
apple
$myArray = array (4 => 'apple', 7 => 'orange', 13 => 'plum'); $arrayKeys = array_keys($myArray); // The first element of your array is: echo $myArray[$arrayKeys[0]];
$array=array( 4 => 'apple', 7 => 'orange', 13 => 'plum' ); $firstValue = each($array)[1];
这比array_values()
因为each()
函数不复制整个数组要高效得多.
有关详细信息,请参阅http://www.php.net/manual/en/function.each.php
一种愚蠢的方式是:
$foo = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' ); function get_first ($foo) { foreach ($foo as $k=>$v){ return $v; } } print get_first($foo);
大多数这些工作!但是对于快速单线(低资源)呼叫:
$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
获得第一个元素:
array_values($arr)[0]
获取最后一个元素
array_reverse($arr)[0]
我认为使用array_values将是您最好的选择。您可以从该函数的结果返回索引零处的值以获取“ apple”。
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!
保持这简单!这里有很多正确的答案,但要尽量减少所有的困惑.这两项工作减少了很多开销.
key($array)
=获取数组的第一个键
current($array)
=获取数组的第一个值