我有一个数组:
阵列(4 = > '苹果',7 = >“橙色”,13 = >“李子”)
我想要得到这个数组的第一个元素。预期结果:串苹果
一个要求:它不能通过引用传递来完成,所以array_shift不是一个好的解决方案。
我该怎么做呢?
我有一个数组:
阵列(4 = > '苹果',7 = >“橙色”,13 = >“李子”)
我想要得到这个数组的第一个元素。预期结果:串苹果
一个要求:它不能通过引用传递来完成,所以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];
其他回答
一种简单的方法是:
$foo = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
function get_first ($foo) {
foreach ($foo as $k=>$v){
return $v;
}
}
print get_first($foo);
PHP 5.4 +:
array_values($array)[0];
没有人建议使用ArrayIterator类:
$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
$first_element = (new ArrayIterator($array))->current();
echo $first_element; //'apple'
绕过OP的参照规定。
PHP 7.3添加了两个函数,用于直接获取数组的第一个和最后一个键,而无需修改原始数组,也无需创建任何临时对象:
array_key_first array_key_last
有几种方法可以为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));
}
}
?>
$arr = $array = array( 9 => 'apple', 7 => 'orange', 13 => 'plum' );
echo reset($arr); // echoes 'apple'
如果不想丢失当前指针的位置,只需为数组创建一个别名。