【问题标题】:How to get the position of a key within an array如何获取数组中键的位置
【发布时间】:2011-09-18 06:15:03
【问题描述】:

好的,所以我需要在这个数组中获取 'blah' 的位置(位置并不总是相同)。例如:

$array = (
    'a' => $some_content,
    'b' => $more_content,
    'c' => array($content),
    'blah' => array($stuff),
    'd' => $info,
    'e' => $more_info,
);

所以,我希望能够返回数组中“blah”键所在位置的编号。在这种情况下,它应该返回 3。我怎样才能快速做到这一点?并且完全不影响 $array 数组。

【问题讨论】:

    标签: php arrays array-key


    【解决方案1】:
    $i = array_search('blah', array_keys($array));
    

    【讨论】:

      【解决方案2】:

      如果您知道密钥存在:

      PHP 5.4 (Demo):

      echo array_flip(array_keys($array))['blah'];
      

      PHP 5.3:

      $keys = array_flip(array_keys($array));
      echo $keys['blah'];
      

      如果您不知道密钥存在,可以通过isset 查询:

      $keys = array_flip(array_keys($array));
      echo isset($keys['blah']) ? $keys['blah'] : 'not found' ;
      

      这与array_search 类似,但使用了已经存在于任何数组中的映射。我不能说它是否真的比array_search 更好,这可能取决于场景,所以只是另一种选择。

      【讨论】:

      • 是的,我知道密钥永远存在!在这种情况下,这会比使用array_search 更快吗?
      • 让我这样回答:只要array_fliparray_search 快,就是:)。密钥查找本身比array_search 更快。
      • 我喜欢这个想法,但根据我的测试,array_search 实际上更快(至少在 PHP 5.3 中)。
      • 取决于您是否需要在同一个数组中进行多次查找...如果您搜索 - 比如说 - 所有键,array_search 是 O(n²),使用 array_flip 那将是 O(n)。如果您需要进行几次查找,请使用 search。 (对于这两种解决方案,您当然会将中间数组保存在另一个变量中,以防您需要多次查找,为了性能)
      【解决方案3】:

      $keys=array_keys($array); 会给你一个包含$array 键的数组

      所以,array_search('blah', $keys); 将在$keys 中为您提供blah 的索引,因此,$array

      【讨论】:

        【解决方案4】:

        用户array_search (doc)。即,`$index = array_search('blah', $array)

        【讨论】:

        • 不!正如文档所说:在数组中搜索给定的 value,而不是用户询问的 key
        猜你喜欢
        • 1970-01-01
        • 2014-05-09
        • 2013-06-14
        • 2011-03-28
        • 2012-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-05
        相关资源
        最近更新 更多