确定可能关联数组中的第一个键的最佳方法是什么?我的第一个想法是先遍历数组,然后立即打破它,如下所示:

foreach ($an_array as $key => $val) break;

因此,$key包含第一个键,但这似乎效率很低。有人有更好的解决方案吗?


当前回答

$myArray = array(
    2 => '3th element',
    4 => 'first element',
    1 => 'second element',
    3 => '4th element'
);
echo min(array_keys($myArray)); // return 1

其他回答

为了增强Webmut的解决方案,我添加了以下解决方案:

$firstKey = array_keys(array_slice($array, 0, 1, TRUE))[0];

我在PHP 7.1上的输出是:

foreach to get first key and value: 0.048566102981567 seconds 
reset+key to get first key and value: 0.11727809906006 seconds 
reset+key to get first key: 0.11707186698914 seconds 
array_keys to get first key: 0.53917098045349 seconds 
array_slice to get first key: 0.2494580745697 seconds 

如果对大小为10000的数组执行此操作,则结果将变为

foreach to get first key and value: 0.048488140106201 seconds 
reset+key to get first key and value: 0.12659382820129 seconds 
reset+key to get first key: 0.12248802185059 seconds 
array_slice to get first key: 0.25442600250244 seconds 

array_keys方法在30秒时超时(只有1000个元素,其余元素的计时大致相同,但array_key方法大约有7.5秒)。

我认为最好和最快的方法是:

$first_key=key(array_slice($array, 0, 1, TRUE))
list($firstKey) = array_keys($yourArray);

2019年更新

从PHP 7.3开始,有一个名为array_key_first()的新内置函数,它将在不重置内部指针的情况下从给定数组中检索第一个键。查看文档以了解更多信息。


您可以使用重置和按键:

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

它基本上与初始代码相同,但开销稍小,而且发生的情况更明显。

只需记住调用reset,否则可能会得到数组中的任何键。您也可以使用结束而不是重置来获取最后一个密钥。

如果您希望键获得第一个值,reset实际上会返回它:

$first_value = reset($array);

但有一种特殊情况需要注意(因此首先检查数组的长度):

$arr1 = array(false);
$arr2 = array();
var_dump(reset($arr1) === reset($arr2)); // bool(true)

请查找以下内容:

$yourArray = array('first_key'=> 'First', 2, 3, 4, 5);
$keys   =   array_keys($yourArray);
echo "Key = ".$keys[0];

工作示例: