我有一个数组:
array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )
我想得到这个数组的第一个元素.预期结果:字符串 apple
一个要求:通过引用传递不能完成,因此array_shift不是一个好的解决方案.
我怎样才能做到这一点?
blu*_*yed 1304
原始答案,但代价高昂(O(n)):
array_shift(array_values($array));
Run Code Online (Sandbox Code Playgroud)
在O(1)中:
array_pop(array_reverse($array));
Run Code Online (Sandbox Code Playgroud)
编辑其他用例的评论建议等...
如果修改(在重置数组指针的意义上)$array不是问题,您可以使用:
reset($array);
Run Code Online (Sandbox Code Playgroud)
如果需要数组"copy",理论上这应该更有效:
array_shift(array_slice($array, 0, 1));
Run Code Online (Sandbox Code Playgroud)
使用PHP 5.4+(但如果为空则可能导致索引错误):
array_values($array)[0];
Run Code Online (Sandbox Code Playgroud)
lep*_*epe 767
正如迈克指出的那样(最简单的方法):
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )
echo reset($arr); // Echoes "apple"
Run Code Online (Sandbox Code Playgroud)
如果你想获得密钥:(重置后执行)
echo key($arr); // Echoes "4"
Run Code Online (Sandbox Code Playgroud)
从PHP的文档:
mixed reset(array &$ array);
描述:
reset()将数组的内部指针倒回第一个元素并返回第一个数组元素的值,如果数组为空则返回FALSE.
Ija*_*een 269
$first_value = reset($array); // First element's value
$first_key = key($array); // First element's key
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.:)
yod*_*oda 92
$arr = array( 9 => 'apple', 7 => 'orange', 13 => 'plum' );
echo reset($arr); // echoes 'apple'
Run Code Online (Sandbox Code Playgroud)
如果您不想丢失当前指针位置,只需为该数组创建一个别名.
Tof*_*eeq 85
current($array)
根据PHP手册,可以获得数组的第一个元素
每个数组都有一个指向其"当前"元素的内部指针,该元素被初始化为插入到数组中的第一个元素.
所以它一直有效,直到你重新定位数组指针,否则你将不得不重置数组.
Ser*_*nko 67
您可以使用语言构造"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;
Run Code Online (Sandbox Code Playgroud)
使用array_keys函数,您可以对键执行相同的操作:
list($firstKey) = array_keys($yourArray);
list(, $secondKey) = array_keys($yourArray);
Run Code Online (Sandbox Code Playgroud)
Sam*_*Ata 54
PHP 5.4+:
array_values($array)[0];
Run Code Online (Sandbox Code Playgroud)
Ale*_*rov 29
PHP 7.3添加了两个函数,用于直接获取数组的第一个和最后一个键,而无需修改原始数组,也无需创建任何临时对象:
除了具有语义意义外,这些函数甚至不会移动数组指针(就像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];
Run Code Online (Sandbox Code Playgroud)
$first_value = $my_array[ array_key_first($my_array) ];
$last_value = $my_array[ array_key_last($my_array) ];
Run Code Online (Sandbox Code Playgroud)
$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) ];
Run Code Online (Sandbox Code Playgroud)
小智 27
假设:
$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
Run Code Online (Sandbox Code Playgroud)
只需使用:
$array[key($array)]
Run Code Online (Sandbox Code Playgroud)
得到第一个元素或
key($array)
Run Code Online (Sandbox Code Playgroud)
得到第一把钥匙.
或者,如果要删除它,可以取消第一个链接.
Lee*_*son 24
某些阵列不喜欢职能的工作list,reset或current.也许它们是"虚假"阵列 - 例如,部分实现ArrayIterator.
如果要拉出第一个值而不管数组,可以使迭代器短路:
foreach($array_with_unknown_keys as $value) break;
Run Code Online (Sandbox Code Playgroud)
然后,您的值将可用,$value并且循环将在第一次迭代后中断.这比将一个可能很大的数组复制到像array_unshift(array_values($ arr))这样的函数更有效.
你也可以这样抓住钥匙:
foreach($array_with_unknown_keys as $key=>$value) break;
Run Code Online (Sandbox Code Playgroud)
如果您从函数中调用它,只需提前返回:
function grab_first($arr) {
foreach($arr as $value) return $value;
}
Run Code Online (Sandbox Code Playgroud)
Gra*_*ble 18
来自Laravel的助手:
function head($array)
{
return reset($array);
}
Run Code Online (Sandbox Code Playgroud)
数组通过值传递给函数,reset()会影响数组副本的内部指针,它不会触及原始数组.(注意false如果数组为空则返回)
用法示例:
$data = ['foo', 'bar', 'baz'];
current($data); // foo
next($data); // bar
head($data); // foo
next($data); // baz
Run Code Online (Sandbox Code Playgroud)
此外,这是一个替代方案.它的速度非常快,但更有趣的是,如果数组为空,它可以轻松更改默认值:
function head($array, $default = null)
{
foreach ($array as $item) {
return $item;
}
return $default;
}
Run Code Online (Sandbox Code Playgroud)
对于记录,这是我的另一个答案,对于数组的最后一个元素.
小智 11
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
foreach($arr as $first) break;
echo $first;
Run Code Online (Sandbox Code Playgroud)
输出:
apple
Run Code Online (Sandbox Code Playgroud)
小智 10
$myArray = array (4 => 'apple', 7 => 'orange', 13 => 'plum');
$arrayKeys = array_keys($myArray);
// The first element of your array is:
echo $myArray[$arrayKeys[0]];
Run Code Online (Sandbox Code Playgroud)
$array=array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
$firstValue = each($array)[1];
Run Code Online (Sandbox Code Playgroud)
这比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);
Run Code Online (Sandbox Code Playgroud)
PHP 7.3增加了两个函数,用于直接获取数组的第一个和最后一个键,无需修改原始数组,也无需创建任何临时对象:
“有几种方法可以为 PHP 7.3.0 之前的版本提供此功能。可以使用 array_keys(),但这可能相当低效。也可以使用 reset() 和 key(),但那可能会改变内部数组指针。一个有效的解决方案,它不会改变内部数组指针,写成 polyfill:”
<?php
if (!function_exists('array_key_first')) {
function array_key_first($arr) {
foreach($arr as $key => $unused) {
return $key;
}
return NULL;
}
}
if (!function_exists('array_key_last')) {
function array_key_last($arr) {
return array_key_first(array_reverse($arr, true));
}
}
?>
Run Code Online (Sandbox Code Playgroud)
大多数这些工作!但是对于快速单线(低资源)呼叫:
$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)
Run Code Online (Sandbox Code Playgroud)
虽然这很有效,但也很好,请另外看看我的答案:https: //stackoverflow.com/a/48410351/1804013
获得第一个元素:
array_values($arr)[0]
Run Code Online (Sandbox Code Playgroud)
获取最后一个元素
array_reverse($arr)[0]
Run Code Online (Sandbox Code Playgroud)
用:
$first = array_slice($array, 0, 1);
$val= $first[0];
Run Code Online (Sandbox Code Playgroud)
默认情况下,array_slice不保留键,因此我们可以安全地使用零作为索引。
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:
<?php
$original = array(4 => array('one', 'two'), 7 => array('three', 'four'));
reset($original); // to reset the internal array pointer...
$first_element = current($original); // get the current element...
?>
Run Code Online (Sandbox Code Playgroud)
Thanks to all the current solutions helped me get to this answer, I hope this helps someone sometime!
保持这简单!这里有很多正确的答案,但要尽量减少所有的困惑.这两项工作减少了很多开销.
key($array)=获取数组的第一个键
current($array)=获取数组的第一个值