繁体   English   中英

php:如何从数字索引中获取关联数组键?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM