我需要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的密钥,即精确的搜索值。
答案 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告诉函数也使用匹配类型(===)。