确定可能关联数组中的第一个键的最佳方法是什么?我的第一个想法是先遍历数组,然后立即打破它,如下所示:
foreach ($an_array as $key => $val) break;
因此,$key包含第一个键,但这似乎效率很低。有人有更好的解决方案吗?
确定可能关联数组中的第一个键的最佳方法是什么?我的第一个想法是先遍历数组,然后立即打破它,如下所示:
foreach ($an_array as $key => $val) break;
因此,$key包含第一个键,但这似乎效率很低。有人有更好的解决方案吗?
当前回答
第73页:
$array = ['a' => '..', 'b' => '..'];
array_key_first($array); // 'a'
array_key_last($array); // 'b';
http://php.net/manual/en/function.array-key-first.php
其他回答
array_cchunk将数组拆分为块,可以使用:
$arr = ['uno'=>'one','due'=>'two','tre'=>'three'];
$firstElement = array_chunk($arr,1,true)[0];
var_dump($firstElement);
key($an_array)将为您提供第一个密钥
edit-per-Blixt:您应该调用reset($array);before键($anarray)将指针重置到数组的开头。
有趣的是,foreach循环实际上是最有效的方法。
由于OP专门询问了效率,应该指出的是,目前所有的答案实际上都比foreach的效率低得多。
我用php5.4做了一个基准测试,重置/键指针方法(接受的答案)似乎比foreach慢7倍。其他处理整个数组的方法(array_keys、array_flip)显然比这还要慢,并且在处理大型数组时会变得更糟。
Foreach一点也不低效,请随意使用!
编辑2015-03-03:
基准脚本已经被要求,我没有原始脚本,而是做了一些新的测试。这次我发现foreach的速度只有reset/key的两倍。我使用了一个100键数组,并将每个方法运行了一百万次,以获得一些明显的差异,下面是简单基准测试的代码:
$array = [];
for($i=0; $i < 100; $i++)
$array["key$i"] = $i;
for($i=0, $start = microtime(true); $i < 1000000; $i++) {
foreach ($array as $firstKey => $firstValue) {
break;
}
}
echo "foreach to get first key and value: " . (microtime(true) - $start) . " seconds <br />";
for($i=0, $start = microtime(true); $i < 1000000; $i++) {
$firstValue = reset($array);
$firstKey = key($array);
}
echo "reset+key to get first key and value: " . (microtime(true) - $start) . " seconds <br />";
for($i=0, $start = microtime(true); $i < 1000000; $i++) {
reset($array);
$firstKey = key($array);
}
echo "reset+key to get first key: " . (microtime(true) - $start) . " seconds <br />";
for($i=0, $start = microtime(true); $i < 1000000; $i++) {
$firstKey = array_keys($array)[0];
}
echo "array_keys to get first key: " . (microtime(true) - $start) . " seconds <br />";
在我的php 5.5上,此输出:
foreach to get first key and value: 0.15501809120178 seconds
reset+key to get first key and value: 0.29375791549683 seconds
reset+key to get first key: 0.26421809196472 seconds
array_keys to get first key: 10.059751987457 seconds
重置+键http://3v4l.org/b4DrN/perf#tabs前肢http://3v4l.org/gRoGD/perf#tabs
对我来说最好的方法是
array_shift(array_keys($array))
arraykeys从初始数组中获取关键字数组,然后arrayshift从其第一个元素值中剪切。为此,您需要PHP 5.4+。
请查找以下内容:
$yourArray = array('first_key'=> 'First', 2, 3, 4, 5);
$keys = array_keys($yourArray);
echo "Key = ".$keys[0];
工作示例: