代码之家  ›  专栏  ›  技术社区  ›  Christian Stewart

PHP搜索数组问题

  •  1
  • Christian Stewart  · 技术社区  · 14 年前

    我需要一个 array_search 严格搜索我的数组,确保该项 完全相同的 (表示整件事与输入值相同)。我知道A中的第三个变量 array_search() php中的函数-严格的,但我不希望它检查它是否是同一个实例,因为它不是。我该怎么做?

    以下是我当前使用的代码:

    array_search(some, array(someItem,anothervariable, yetanothervariable, some)); 
    //output - 0 (the first item) which contains some but isn't exactly some.
    

    请求的输出:

    它不输出包含某些项的第一个项,而是输出最后一个项的键3,即确切的搜索值。

    3 回复  |  直到 14 年前
        1
  •  0
  •   kevtrout    14 年前

    您是否愿意使用foreach循环而不是数组搜索?

    如果是这样的话,试试这个:

    $haystack = array('something', 'someone', 'somewhere', 'some');
    $needle = 'some';
    
    foreach($haystack as $key=>$straw){
        if($straw === $needle){
            $straws[$key] = $straw;
            }
        }
    
    print_r($straws);
    

    它会打印出来

    Array ( [3] => some ) 
    

    或者你可以用 array_keys() 指定了搜索值。

    然后,使用上面相同的$haystack和$needle:

    $result = array_keys($haystack,$needle,TRUE);
    print_r($result);
    

    这种回报:

    Array ( [0] => 3 ) 
    

    第一个参数是要从中返回键的数组,第二个参数是搜索值,如果包含此参数,则只返回数组元素中与搜索值匹配的键。包括第三个布尔参数告诉函数也使用匹配类型(==)。

        2
  •  1
  •   lod    14 年前

    带strict的数组搜索等价于==运算符。

    无严格条件的数组搜索等价于==运算符。

    如果您需要某种特殊的比较(例如比较对象的元素),而这两者都没有覆盖,那么您需要编写一个循环。

        3
  •  0
  •   eat_a_lemon    14 年前

    不太确定您要问什么,但在PHP中,严格的比较是通过 三等号(==)。这意味着值和类型必须相同。 因此,如果将字符串“1”和整数1与==进行比较,它将失败。 如果strict为false,则将字符串“1”与整数1进行比较将成功。 这是“严格”在数组搜索案例中的含义。 我在下面实现了数组搜索,这样你就可以看到它在做什么。

    function my_array_search($input, $search_array, $strict=false) {
            if(is_array($search_array)) {
                foreach($search_array as $key => $val) {
                    if($strict === true) {
                        if($val === $input) {
                            return $key;
                        }
                    } else {
                        if($val == $input) {
                            return $key;
                        }
                    }
    
                }
            }
    
    }