在PHP中返回关联数组的第一个键

时间:2011-07-14 18:52:03

标签: php arrays key associative-array

我正在尝试获取关联数组的第一个键,而不通过array_keys()等创建临时变量,以通过引用传递。不幸的是,reset()array_shift()都通过引用获取数组参数,因此似乎都不是可行的结果。

PHP 5.4我会在天堂; array_keys($array)[0];,但不幸的是,这当然也不是一种选择。

我可以创建一个函数来实现这个目的,但是我只能想象PHP的array_*函数有一些混合物会在一个语句中产生所需的结果,我无法想到或想出来。

所以:

$array = array('foo' => 'bar', 'hello' => 'world');

$firstKey = assorted_functions($array); // $firstKey = 'foo'

我的问题中“无参考”条款的原因仅在于我假设需要array_keys()这一事实(如果有一种方式通过参考传递,请消防

我使用key(),但这需要reset(),因为我不确定此操作时指针的位置。


附录

我正在跟进我最近的一个实现:正如我在评论中提到的那样,它将使用相同的内存,所以如果这是一个问题,这个问题没有解决方案。

$a = range(0,99999);
var_dump(memory_get_peak_usage()); // int(8644416)
$k = array_keys($a)[0];
var_dump(memory_get_peak_usage()); // int(17168824)

知道这个,因为PHP没有这样的优化功能,但认为它有必要明确提及。

接受答案的简洁性很好,如果您正在使用合理大小的数组,那么它们就可以正常工作。

5 个答案:

答案 0 :(得分:63)

虽然array_shift(array_keys($array));可以正常工作,但current(array_keys($array));更快,因为它不会推进内部指针。

任何一个都可以工作。

更新

正如@TomcatExodus所指出的,array_shift();期望通过引用传递数组,因此第一个示例将发出错误。最好坚持使用current();

答案 1 :(得分:18)

您可以使用resetkey

reset( $array );
$first_key = key( $array );

或者,你可以使用一个函数:

function firstIndex($a) { foreach ($a as $k => $v) return $k; }
$key = firstIndex( $array );

答案 2 :(得分:1)

array_shift(array_keys($array))

答案 3 :(得分:1)

each()仍然是临时需要的,但可能比使用array_keys()的开销要小得多。

答案 4 :(得分:0)

使用array_slice(与关联数组的array_keys结合使用)?

$a = range(0,999999);
var_dump(memory_get_peak_usage());
$k = array_keys(array_slice($a, 0, 1, TRUE))[0];
var_dump(memory_get_peak_usage());
var_dump($k);
$k = array_keys($a)[0];
var_dump(memory_get_peak_usage());

作为输出(至少与我一起):

int(36354360)
int(36355112)
int(0)
int(72006024)
int(0)
相关问题