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:如何从数字索引中获取关联数组键?的主要内容,如果未能解决你的问题,请参考以下文章

php判断数组是关联数组还是数值数组

PHP 数组中的每个ID键关联一个值,可不可以关联两个值?

PHP中的数组

PHP 数组

PHP 数组

php 中有没有集合