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

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()的新内置函数,该函数将从给定数组中检索第一个键,而无需重置内部指针。 查看文档以获取更多信息。


您可以使用resetkey

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'

文档可在此处获得 。

获取(可能)关联数组中的第一个键?相关推荐

  1. python 取数组最后一个,如何获取数组中的最后一个键?

    如何获得数组的最后一个键? #1楼 只需使用: echo $array[count($array) - 1]; #2楼 不知道这是否会更快,但是用这种方法似乎更容易,并且可以通过不将函数传递给end( ...

  2. python取数组最后一个元素_Python Json。只获取json数组中的最后一个元素

    我刚开始尝试python,现在我有点左右为难.在 我试图从一个json文档打印,而我只得到数组中的最后一个元素.在[{ "FullMeasure": "1/2 cup&q ...

  3. PHP 如何获取二维数组中某个key的集合(高性能查找)

    分享下PHP 获取二维数组中某个key的集合的方法. 具体是这样的,如下一个二维数组,是从库中读取出来的. 代码: $user = array( 0 => array( 'id' => 1 ...

  4. PHP获取二维数组中某一列的值集合

    PHP还是比较常用的,于是我研究了一下PHP二维数组,下面通过本文给大家介绍PHP获取二维数组中某一列的值集合,对php数组二维数组的值相关知识感兴趣的朋友一起学习吧 PHP还是比较常用的,于是我研究 ...

  5. php 数组指向下一个值,比较数组值并根据自定义值(PHP)在数组中查找下一个值 - php...

    我正在尝试比较数组中的值,然后根据所选值在数组中选择下一个值. 例如 array(05:11,05:21,05:24,05:31,05:34,05:41,05:44,05:50,05:54); 如果搜 ...

  6. 在一个数组中删除另一个数组存在的值

    在一个数组中删除另一个数组存在的值 可以在购物车中删除多个商品的时候用此方法 在Vuex实现完整购物车中有涉及,详见 Vuex实现完整购物车 <script type="text/ja ...

  7. js删除数组中的某一个元素

    删除数组中的某一个元素,这里写一个普通的办法 首先可以给JS的数组对象定义一个函数,用于查找指定的元素在数组中的位置,即索引,代码为: Array.prototype.indexOf = functi ...

  8. Python 轻松解决从 K 个字符串数组中任意取一个字符串,按顺序拼接,列出所有可能的字符串组合。(对比用库和不用库的方法)

    文章目录 一.问题说明 二.解决方法 一.问题说明 问题来源:粉丝的提问 从 K 个字符串数组中任意取一个字符串,按顺序拼接,列出所有可能的字符串组合(对比用库和不用库的方法) 二.解决方法 iter ...

  9. 从K个数组中任取一个字符串进行按顺序拼接

    完整题目 给定K个字符串数组,从这K个数组中任取一个字符串,按顺序拼接,列出所有可能的字符串组合 样例: input:[['a','b','cd'],['de'],['e','f']] output: ...

最新文章

  1. (C++)1020 月饼 简单贪心
  2. IE6 IE7 不支持 JSON
  3. 怎么删除顽固的服务器文件夹,实用技巧:删除Windows XP下顽固文件方法
  4. 【渝粤题库】广东开放大学 市场营销 形成性考核
  5. 卷积神经网络的重要知识点
  6. eclipse黑色炫酷主题设置1
  7. 代码管理工具——SVN
  8. android谷歌卫星地图,高德地图安卓端实现卫星地图路网功能
  9. Ubuntu Linux 3D桌面完全教程
  10. 输入三个整数a,b,c。并进行两两相加,最后比较相加和的最大值。
  11. 壁纸|锁屏和桌面套图壁纸,一套的,给手机来个套餐
  12. python爬取当当网商品评论
  13. redis获取缓存对象bean时报:SerializationException: Could not read JSON: Could not resolve type
  14. 终于给笔记本加了条内存
  15. 纷享销客罗旭对话旷视唐文斌:数字化的AI革命之路
  16. c++中的四种cast转换, dynamic_cast、static_cast、const_cast、reinterpret_cast
  17. GBASE 8C——SQL参考 2 函数和操作符
  18. 高效使用浏览器的5个小技巧,第1个技巧最实用
  19. Win10怎么删除右键菜单里的AMD显卡设置选项
  20. python——使用cv2拼接图片(含代码)

热门文章

  1. jquery的mCustomScrollbar滚动条创建在ie8下报frameElement的相关错
  2. 蒙特卡罗算法与拉斯维加斯算法
  3. 常用的php.ini 配置选项
  4. 可伸缩多线程任务队列
  5. WayOS路由器企业应用方案
  6. mojing SDK根据坐标进行移动
  7. python基础之字符编码、文件处理
  8. 51nod 1065 最小正子段和 (贪心)
  9. Activity的四种启动模式区别
  10. (TOJ1248)Encoding