【问题标题】:Finding a specific key in an php array在 php 数组中查找特定键
【发布时间】:2012-01-31 16:32:24
【问题描述】:

我在数组中找到正确的键时遇到了一些麻烦:

当我有一个数组时:$haystack

$haystack = array(0 => 'apple', 
                  1 => 'apple', 
                  2 => 'pear', 
                  3 => 'apple', 
                  4 => 'banana');

并且是使用函数array_search

$key = array_search('apple', $haystack);

函数会将 $key 值设置为 '0' ( $key = 0 )

我需要在数组 (3) 中找到第四项的键,它也是苹果... 有谁知道从给定索引搜索数组并返回值的函数?

例如:

array_search_start($needle, $haystack, $startPosition);

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    使用array_keys 和第二个参数来指定要搜索键的值。

    $keys = array_keys($haystack, 'apple');
    

    所以$keys 将包含与搜索值相对应的找到键的数组 (apple):

    Array
    (
        [0] => 0
        [1] => 1
        [2] => 3
    )
    

    现在你可以得到最后一个,或者第一个等等。如果你需要最后一个:

    $key = end($keys);
    

    【讨论】:

    • 这只会给你最后一个键... OP 要求从指定索引的偏移量,不一定是最后一个。您应该修改以获取第一个密钥 >= $startPostion
    【解决方案2】:

    这应该可行:

    <?php
    function array_search_start($needle, $haystack, $start) {
      for ($i = $start; $i < length($haystack); $i++)
        if ($haystack[$i] == $needle) return $i;
      return FALSE; // You'll need === operator to distinguish between False and 0
    }
    ?>
    

    祝你好运!

    【讨论】:

      【解决方案3】:

      您也可以使用 array_slice 比循环更简单地执行此操作:

      <?php
      $key = array_search($needle, array_slice($haystack, $startPosition,-1,true));
      ?>
      

      此语法需要 PHP>=5.0.2,因为我们需要保留密钥(因此 -1(无长度限制)和 true 保留原始密钥)

      【讨论】:

        【解决方案4】:

        对 PHP 不太了解,但是,您不能只包含一个偏移量作为起始位置吗?

        int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
        

        所以,在你的情况下,你会这样做

        $key = array_search('apple', $haystack, 2);
        

        【讨论】:

          【解决方案5】:

          您可以使用array_keys 获取所有值为apple 的键

          $keys = array_keys($haystack, 'apple');
          

          如果你需要把它写成一个函数,那么你可以这样做:

          $searchValue = 'apple';
          $keys = searchKeys($haystack, $searchValue);
          function searchKeys($haystack,$searchValue) {
               $keys = array_keys($haystack, $searchValue);
               return $keys;
          }
          

          希望对你有帮助:)

          【讨论】:

            【解决方案6】:
            <?
            
            $array = array("one"=>'paul',"two"=>'lady');
            print_r(array_values($array));
            
            ?>
            

            【讨论】:

              【解决方案7】:
              $haystack = array(0 => 'apple', 
                                1 => 'apple', 
                                2 => 'pear', 
                                3 => 'apple', 
                                4 => 'banana');
              $find = 'apple';
              foreach ($haystack as $k=>$v) {
                  if($find == $v) {
                          echo 'found! key is '.$k.'<br />';
                          }
              }  
              

              【讨论】:

                【解决方案8】:

                这将非常容易使用

                $haystack = array(0 => 'apple', 
                                  1 => 'apple', 
                                  2 => 'pear', 
                                  3 => 'apple', 
                                  4 => 'banana');
                
                $keys = array_keys($haystack,'apple');
                foreach($keys as $k):
                    $searchK[] = $haystack[$k];
                endforeach;
                
                print_r($searchK);
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2011-12-27
                  • 2014-08-21
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-10-23
                  • 2014-05-11
                  • 2012-09-04
                  相关资源
                  最近更新 更多