PHP搜索数组问题

时间:2010-08-30 00:50:55

标签: php arrays

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

以下是我目前正在使用的代码:

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

请求的输出:

不是输出包含some,someItem的第一个项目,而是输出最后一个项目3的密钥,即精确的搜索值。

3 个答案:

答案 0 :(得分:1)

使用strict的数组搜索等同于===运算符。

没有严格的数组搜索等同于==运算符。

如果您需要某种特殊比较,而这些特殊比较并未被其中任何一个比较(比较对象的元素),那么您需要编写一个循环。

答案 1 :(得分:0)

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

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;
                    }
                }

            }
        }

}

答案 2 :(得分:0)

您是否愿意使用foreach循环而不是array_search?

若是,请尝试:

$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 ) 

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