获取(可能)关联数组中的第一个键?
确定可能关联数组中的第一个键的最佳方法是什么? 我首先想到的是,它只存储数组,然后立即破坏它,如下所示:
foreach ($an_array as $key => $val) break;
因此,让$ key包含第一个键,但这似乎效率很低。 有谁有更好的解决方案?
#1楼
list($firstKey) = array_keys($yourArray);
#2楼
array_keys
返回一个键数组。 以第一个条目。 另外,您可以在阵列上调用reset
,然后再调用key
。 后一种方法可能会稍快一些(我没有测试过),但是它具有重置内部指针的副作用。
#3楼
key($an_array)
将给你第一个键
每个Blixt编辑:您应该调用reset($array);
在key($an_array)
之前将指针重置为数组的开头。
#4楼
2019更新
从PHP 7.3开始,有一个名为array_key_first()
的新内置函数,该函数将从给定数组中检索第一个键,而无需重置内部指针。 查看文档以获取更多信息。
您可以使用reset
和key
:
reset($array);
$first_key = key($array);
它本质上与您的初始代码相同,但是开销更少,而且发生的情况更明显。
只要记住要调用reset
,否则您可能会得到数组中的任何键。 您也可以使用end
而不是reset
来获取最后一个密钥。
如果您希望键获取第一个值,则reset
实际上将其返回:
$first_value = reset($array);
不过,有一种特殊情况需要提防(因此请先检查数组的长度):
$arr1 = array(false);
$arr2 = array();
var_dump(reset($arr1) === reset($arr2)); // bool(true)
#5楼
$myArray = array(2 => '3th element',4 => 'first element',1 => 'second element',3 => '4th element'
);
echo min(array_keys($myArray)); // return 1
#6楼
这也可能是一个解决方案。
$yourArray = array('first_key'=> 'First', 2, 3, 4, 5);
$first_key = current(array_flip($yourArray));
echo $first_key;
我已经对其进行了测试,并且可以正常工作。
工作代码:
#7楼
如果效率对您而言并不那么重要,则可以在PHP 5.4(及更高版本)中使用array_keys($yourArray)[0]
。
例子:
# 1
$arr = ["my" => "test", "is" => "best"];
echo array_keys($arr)[0] . "\r\n"; // prints "my"# 2
$arr = ["test", "best"];
echo array_keys($arr)[0] . "\r\n"; // prints "0"# 3
$arr = [1 => "test", 2 => "best"];
echo array_keys($arr)[0] . "\r\n"; // prints "1"
解决方案的优势:
list($firstKey) = array_keys($yourArray);
是您可以将array_keys($arr)[0]
作为函数参数传递(即doSomething(array_keys($arr)[0], $otherParameter)
)。
高温超导
#8楼
有趣的是,foreach循环实际上是最有效的方法。
由于OP特别询问了效率,因此应该指出,当前所有答案的效率实际上都比foreach低得多。
我使用php 5.4进行了基准测试,并且reset / key指针方法(可接受的答案)似乎比foreach慢7倍。 操纵整个阵列的其他方法(array_keys,array_flip)明显更慢比并配有大型阵列工作时变得更糟 。
Foreach一点也不低效,请随时使用它!
编辑2015-03-03:
基准脚本已被要求,我没有原始脚本,但是做了一些新的测试。 这次,我发现foreach仅是reset / key的两倍。 我使用了100个键的数组,并且每种方法都运行了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
foreach http://3v4l.org/gRoGD/perf#tabs
#9楼
$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'key3');list($first_key) = each($arr);print $first_key;// key1
#10楼
你可以试试
array_keys($data)[0]
#11楼
单线:
$array = array('key1'=>'value1','key2'=>'value2','key3'=>'key3');
echo key( array_slice( $array, 0, 1, true ) );# echos 'key1'
#12楼
对我来说最好的方法是
array_shift(array_keys($array))
array_keys
从初始数组中获取键数组,然后array_shift
从它的第一个元素值array_shift
剪切。 为此,您将需要PHP 5.4+。
#13楼
你可以玩你的数组
$daysArray = array('Monday', 'Tuesday', 'Sunday');
$day = current($transport); // $day = 'Monday';
$day = next($transport); // $day = 'Tuesday';
$day = current($transport); // $day = 'Tuesday';
$day = prev($transport); // $day = 'Monday';
$day = end($transport); // $day = 'Sunday';
$day = current($transport); // $day = 'Sunday';
要获取数组的第一个元素,您可以使用current
;对于最后一个元素,您可以使用end
编辑
只是为了避免得到更多的否决票,您可以使用array_keys
将键转换为值,并使用如上所示。
#14楼
这是我曾经发现的更简单的方法。 快速而只有两行代码:-D
$keys = array_keys($array);
echo $array[$keys[0]];
#15楼
今天,我不得不搜索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。
#16楼
为了增强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_keys方法大约为7.5秒)。
#17楼
对于2018年+
从PHP 7.3开始,有一个array_key_first()
函数可以完全实现此目的:
$array = ['foo' => 'lorem', 'bar' => 'ipsum'];
$firstKey = array_key_first($array); // 'foo'
文档可在此处获得 。
获取(可能)关联数组中的第一个键?相关推荐
- python 取数组最后一个,如何获取数组中的最后一个键?
如何获得数组的最后一个键? #1楼 只需使用: echo $array[count($array) - 1]; #2楼 不知道这是否会更快,但是用这种方法似乎更容易,并且可以通过不将函数传递给end( ...
- python取数组最后一个元素_Python Json。只获取json数组中的最后一个元素
我刚开始尝试python,现在我有点左右为难.在 我试图从一个json文档打印,而我只得到数组中的最后一个元素.在[{ "FullMeasure": "1/2 cup&q ...
- PHP 如何获取二维数组中某个key的集合(高性能查找)
分享下PHP 获取二维数组中某个key的集合的方法. 具体是这样的,如下一个二维数组,是从库中读取出来的. 代码: $user = array( 0 => array( 'id' => 1 ...
- PHP获取二维数组中某一列的值集合
PHP还是比较常用的,于是我研究了一下PHP二维数组,下面通过本文给大家介绍PHP获取二维数组中某一列的值集合,对php数组二维数组的值相关知识感兴趣的朋友一起学习吧 PHP还是比较常用的,于是我研究 ...
- php 数组指向下一个值,比较数组值并根据自定义值(PHP)在数组中查找下一个值 - php...
我正在尝试比较数组中的值,然后根据所选值在数组中选择下一个值. 例如 array(05:11,05:21,05:24,05:31,05:34,05:41,05:44,05:50,05:54); 如果搜 ...
- 在一个数组中删除另一个数组存在的值
在一个数组中删除另一个数组存在的值 可以在购物车中删除多个商品的时候用此方法 在Vuex实现完整购物车中有涉及,详见 Vuex实现完整购物车 <script type="text/ja ...
- js删除数组中的某一个元素
删除数组中的某一个元素,这里写一个普通的办法 首先可以给JS的数组对象定义一个函数,用于查找指定的元素在数组中的位置,即索引,代码为: Array.prototype.indexOf = functi ...
- Python 轻松解决从 K 个字符串数组中任意取一个字符串,按顺序拼接,列出所有可能的字符串组合。(对比用库和不用库的方法)
文章目录 一.问题说明 二.解决方法 一.问题说明 问题来源:粉丝的提问 从 K 个字符串数组中任意取一个字符串,按顺序拼接,列出所有可能的字符串组合(对比用库和不用库的方法) 二.解决方法 iter ...
- 从K个数组中任取一个字符串进行按顺序拼接
完整题目 给定K个字符串数组,从这K个数组中任取一个字符串,按顺序拼接,列出所有可能的字符串组合 样例: input:[['a','b','cd'],['de'],['e','f']] output: ...
最新文章
- (C++)1020 月饼 简单贪心
- IE6 IE7 不支持 JSON
- 怎么删除顽固的服务器文件夹,实用技巧:删除Windows XP下顽固文件方法
- 【渝粤题库】广东开放大学 市场营销 形成性考核
- 卷积神经网络的重要知识点
- eclipse黑色炫酷主题设置1
- 代码管理工具——SVN
- android谷歌卫星地图,高德地图安卓端实现卫星地图路网功能
- Ubuntu Linux 3D桌面完全教程
- 输入三个整数a,b,c。并进行两两相加,最后比较相加和的最大值。
- 壁纸|锁屏和桌面套图壁纸,一套的,给手机来个套餐
- python爬取当当网商品评论
- redis获取缓存对象bean时报:SerializationException: Could not read JSON: Could not resolve type
- 终于给笔记本加了条内存
- 纷享销客罗旭对话旷视唐文斌:数字化的AI革命之路
- c++中的四种cast转换, dynamic_cast、static_cast、const_cast、reinterpret_cast
- GBASE 8C——SQL参考 2 函数和操作符
- 高效使用浏览器的5个小技巧,第1个技巧最实用
- Win10怎么删除右键菜单里的AMD显卡设置选项
- python——使用cv2拼接图片(含代码)