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

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

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


当前回答

今天,我必须搜索POST请求返回的数组的第一个密钥。(并注意表单id等的编号)

我发现了这个:返回PHP中关联数组的第一个键

http://php.net/key

我已经做到了,而且很有效。

    $data = $request->request->all();
    dump($data);
    while ($test = current($data)) {
        dump($test);
        echo key($data).'<br />';die();
        break;
    }

也许会比其他人节省15分钟。CYA。

其他回答

这将适用于所有PHP版本

$firstKey = '' ;

//$contact7formlist - associative array. 

if(function_exists('array_key_first')){
    
    $firstKey = array_key_first($contact7formlist);
    
}else{
    
    foreach ($contact7formlist as $key => $contact7form ){
        $firstKey = $key;
        break;
    }
}

这也可能是一个解决方案:

$yourArray = array('first_key'=> 'First', 2, 3, 4, 5);
$first_key = current(array_flip($yourArray));
echo $first_key;

我已经测试过了,而且效果很好。

工作规范。

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

$first_key=key(array_slice($array, 0, 1, TRUE))

今天,我必须搜索POST请求返回的数组的第一个密钥。(并注意表单id等的编号)

我发现了这个:返回PHP中关联数组的第一个键

http://php.net/key

我已经做到了,而且很有效。

    $data = $request->request->all();
    dump($data);
    while ($test = current($data)) {
        dump($test);
        echo key($data).'<br />';die();
        break;
    }

也许会比其他人节省15分钟。CYA。

为了增强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秒)。