【问题标题】:How to get key or index name from value in array without iteration?如何在不迭代的情况下从数组中的值获取键或索引名称?
【发布时间】:2020-04-28 00:54:07
【问题描述】:

我有一个二维数组。我正在尝试获取给定值的键/索引名称。我该怎么做呢?我浏览了 PHP 手册,他们建议进行迭代,但我不想迭代。有没有办法不用迭代?

我想做类似的事情

$country = 'Algeria';
echo $iso_countries[$country]; //obviously this will throw an error since the index does not exist. It's just an example.

数组

$iso_countries = array
(
    'AF' => 'Afghanistan',
    'AX' => 'Aland Islands',
    'AL' => 'Albania',
    'DZ' => 'Algeria',
);

【问题讨论】:

  • 如果数组是按值排序的,您可以执行binary search,它将在最多 8 个步骤中找到 256 个或更少条目的列表中的任何条目。除此之外,您需要预先构建一个将国家名称映射到其缩写的索引,这基本上就是 array_flip() 将要做的。
  • 您还应该摒弃“循环不好”的观念。循环是做几乎所有事情的基础,您应该花精力了解何时/为什么会错误地使用循环并避免这些,而不是试图围绕一个不存在的问题进行工程设计。

标签: php arrays key


【解决方案1】:

你应该使用 array_search

$iso_countries = array
(
    'AF' => 'Afghanistan',
    'AX' => 'Aland Islands',
    'AL' => 'Albania',
    'DZ' => 'Algeria',
);

$founded = array_search('Algeria',$iso_countries);
echo $founded;

【讨论】:

    【解决方案2】:

    如果没有显式 (foreach,while,for) 或隐式 (in_array,array_flip,array_search) 迭代,就无法从数组中获取键值。

    PHP 数组手册:一个 array 在 PHP 中 实际上是一个有序的地图。映射是一种将值关联到 键。这种类型针对几种不同的用途进行了优化;有可能 被视为数组、列表(向量)、哈希表(a 的实现 map)、字典、集合、堆栈、队列等等。作为 数组值可以是其他数组、树和多维数组 也是可以的。

    从文档中,array 是一个映射,用于从索引或键中获取值,而不是相反。


    如果你用$country进行多次搜索,你可以翻转$iso_contries然后使用索引来获取值。

    $iso_countries = array
    (
        'AF' => 'Afghanistan',
        'AX' => 'Aland Islands',
        'AL' => 'Albania',
        'DZ' => 'Algeria',
    );
    $iso_countries = array_flip($iso_countries);
    $country = 'Algeria';
    echo $iso_countries[$country];
    

    【讨论】:

      猜你喜欢
      • 2016-12-28
      • 2015-09-25
      • 1970-01-01
      • 2014-10-28
      • 2011-10-27
      • 2017-05-07
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多