簡體   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