我有一个数组:

阵列(4 = > '苹果',7 = >“橙色”,13 = >“李子”)

我想要得到这个数组的第一个元素。预期结果:串苹果

一个要求:它不能通过引用传递来完成,所以array_shift不是一个好的解决方案。

我该怎么做呢?


当前回答

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

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

其他回答

使用array_keys()作为数字索引数组访问关联数组的键,然后可以再次将其用作数组的键。

当解为arr[0]时:

(注意,由于具有键的数组是基于0的索引,因此第1 元素是索引0)

你可以使用一个变量,然后减去1,得到你的逻辑,1 => 'apple'。

$i = 1;
$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
echo $arr[array_keys($arr)[$i-1]];

输出:

apple

为了简单起见,只需使用:

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

输出:

apple

通过第一种方法,不仅可以处理第一个元素,还可以像对待索引数组一样对待关联数组。

没有人建议使用ArrayIterator类:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );
$first_element = (new ArrayIterator($array))->current();
echo $first_element; //'apple'

绕过OP的参照规定。

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

一行闭行,复制,重置:

<?php

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

echo (function() use ($fruits) { return reset($fruits); })();

输出:

apple

或者更短的短箭头函数:

echo (fn() => reset($fruits))();

这使用如上所述的按值变量绑定。两者都不会改变原来的指针。

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

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

这比array_values()更有效,因为each()函数不会复制整个数组。

欲了解更多信息,请参阅http://www.php.net/manual/en/function.each.php