[英]php: how to get associative array key from numeric index?
如果我有:
$array = array( 'one' =>'value', 'two' => 'value2' );
我如何从$array[1]
取回字符串one
?
你没有。 您的数组没有键[1]
。 你可以:
创建一个包含键的新数组:
$newArray = array_keys($array); echo $newArray[0];
但是值 "one" 是$newArray[0]
,而不是[1]
。
一个快捷方式是:
echo current(array_keys($array));
获取数组的第一个键:
reset($array); echo key($array);
获取值“value”对应的key:
echo array_search('value', $array);
这一切都取决于您究竟想要做什么。 事实是, [1]
不对应于任何你转动它的“一”。
$array = array( 'one' =>'value', 'two' => 'value2' );
$allKeys = array_keys($array);
echo $allKeys[0];
这将输出:
one
如果您只打算特别使用一个键,则可以用一行完成此操作,而不必为所有键存储一个数组:
echo array_keys($array)[$i];
或者,如果您需要循环使用它
foreach ($array as $key => $value)
{
echo $key . ':' . $value . "\n";
}
//Result:
//one:value
//two:value2
$array = array( 'one' =>'value', 'two' => 'value2' );
$keys = array_keys($array);
echo $keys[0]; // one
echo $keys[1]; // two
关键功能对我有帮助,而且非常简单:
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 />
你可以这样做:
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...
还没有尝试过代码,但我很确定它会起作用。
祝你好运!
如果它是第一个元素,即$array[0]
,您可以尝试:
echo key($array);
如果它是第二个元素,即$array[1]
,您可以尝试:
next($array);
echo key($array);
我认为当所需元素是数组的第一个、第二个或最多第三个元素时,应该使用这种方法。 对于其他情况,应使用循环,否则代码可读性会降低。
再举一个例子:
获取数组中最常出现的次数:
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"
如果您有密钥,则可以轻松查询值(= 频率)。
只是为那些 array_keys() 不起作用的人发布另一个解决方案
$myAssociativeArray = [
'name' => 'sun',
'age' => 21
);
$arrayKeys = [];
foreach($myAssociativeArray as $key => $val){
array_push($arrayKeys, $key);
}
print_r($arrayKeys)
// ['name', 'age']
扩展 Ram Dane 的答案, key函数是获取数组当前索引键的另一种方法。 您可以创建以下功能,
function get_key($array, $index){
$idx=0;
while($idx!=$index && next($array)) $idx++;
if($idx==$index) return key($array);
else return '';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.