php:如何从数字索引中获取关联数组键?
Posted
技术标签:
【中文标题】php:如何从数字索引中获取关联数组键?【英文标题】:php: how to get associative array key from numeric index? 【发布时间】:2011-05-04 23:49:27 【问题描述】:如果我有:
$array = array( 'one' =>'value', 'two' => 'value2' );
如何从$array[1]
获取字符串one
?
【问题讨论】:
换句话说,这是关于返回关联数组的第n个数组键。 【参考方案1】:你没有。您的阵列没有密钥 [1]
。你可以:
创建一个包含键的新数组:
$newArray = array_keys($array);
echo $newArray[0];
但是“一”的值是$newArray[0]
,而不是[1]
。
一个捷径是:
echo current(array_keys($array));
获取数组的第一个键:
reset($array);
echo key($array);
获取值“value”对应的key:
echo array_search('value', $array);
这一切都取决于你到底想要做什么。事实是,[1]
不对应“一”,无论你怎么转动它。
【讨论】:
【参考方案2】:$array = array( 'one' =>'value', 'two' => 'value2' );
$allKeys = array_keys($array);
echo $allKeys[0];
将输出:
one
【讨论】:
【参考方案3】:如果您只打算特别使用一个键,您可以用一行来完成此操作,而不必为所有键存储一个数组:
echo array_keys($array)[$i];
【讨论】:
谢谢...这就是 for 循环中任何人所需要的一切 注意:这需要 php 5.4+ - source 1 | source 2. @Pang 很高兴知道!谢谢。【参考方案4】:或者如果你需要循环使用它
foreach ($array as $key => $value)
echo $key . ':' . $value . "\n";
//Result:
//one:value
//two:value2
【讨论】:
它回显所有键。但是 topicstarter 需要通过数字索引来获取 key。不一样。 我很清楚这一点。但是考虑到 topicstarter 是 php 的新手,这可能是他试图实现的目标,只是不知道 foreach 语法;)【参考方案5】:$array = array( 'one' =>'value', 'two' => 'value2' );
$keys = array_keys($array);
echo $keys[0]; // one
echo $keys[1]; // two
【讨论】:
【参考方案6】:你可以这样做:
function asoccArrayValueWithNumKey(&$arr, $key)
if (!(count($arr) > $key)) return false;
reset($array);
$aux = -1;
$found = false;
while (($auxKey = key($array)) && !$found)
$aux++;
$found = ($aux == $key);
if ($found) return $array[$auxKey];
else return false;
$val = asoccArrayValueWithNumKey($array, 0);
$val = asoccArrayValueWithNumKey($array, 1);
etc...
还没有尝试过代码,但我很确定它会工作。
祝你好运!
【讨论】:
【参考方案7】:如果是第一个元素,即$array[0]
,可以试试:
echo key($array);
如果是第二个元素,即$array[1]
,可以试试:
next($array);
echo key($array);
我认为当需要的元素是数组的第一个、第二个或最多第三个元素时,应该使用这种方法。对于其他情况,应使用循环,否则代码可读性会降低。
【讨论】:
【参考方案8】:key 函数帮助了我,而且非常简单:
key() 函数只是返回数组元素的键 当前由内部指针指向。它不动 以任何方式指向指针。如果内部指针指向末尾 元素列表或数组为空,key() 返回 NULL。
例子:
<?php
$array = array(
'fruit1' => 'apple',
'fruit2' => 'orange',
'fruit3' => 'grape',
'fruit4' => 'apple',
'fruit5' => 'apple');
// this cycle echoes all associative array
// key where value equals "apple"
while ($fruit_name = current($array))
if ($fruit_name == 'apple')
echo key($array).'<br />';
next($array);
?>
上面的例子会输出:
fruit1<br />
fruit4<br />
fruit5<br />
【讨论】:
请不要只发布链接;将来可能无法正常工作。相反,请扩展该函数的作用以及如何使用它。【参考方案9】:再举一个例子:
获取数组中出现频率最高的:
PHP >= 7.3:
$ php --version
PHP 7.4.3 (cli) (built: Oct 6 2020 15:47:56) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies
$ php -a
Interactive mode enabled
php > $a = array_count_values(array('abc','abc','def','def','def'));
php > var_dump($a);
array(2)
["abc"]=>
int(2)
["def"]=>
int(3)
php > arsort($a);
php > var_dump($a);
array(2)
["def"]=>
int(3)
["abc"]=>
int(2)
php > var_dump(array_key_first($a));
string(3) "def"
php > var_dump(array_keys($a)[1]);
string(3) "abc"
如果你有密钥,你可以很容易地查询到值(=频率)。
【讨论】:
【参考方案10】:只是为那些 array_keys() 不起作用的人发布另一个解决方案
$myAssociativeArray = [
'name' => 'sun',
'age' => 21
);
$arrayKeys = [];
foreach($myAssociativeArray as $key => $val)
array_push($arrayKeys, $key);
print_r($arrayKeys)
// ['name', 'age']
【讨论】:
【参考方案11】:扩展 Ram Dane 的回答,key 函数是获取数组当前索引键的另一种方法。您可以创建以下函数,
function get_key($array, $index)
$idx=0;
while($idx!=$index && next($array)) $idx++;
if($idx==$index) return key($array);
else return '';
【讨论】:
以上是关于php:如何从数字索引中获取关联数组键?的主要内容,如果未能解决你的问题,请参考以下文章