2010-08-30 138 views
1

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

这是我目前使用的代码:

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

请求的输出:

而是输出包含一些,someItem的第一个项目,它会输出密钥的最后一个项目, 3,这是确切的搜索值。

+0

这是一个转发,但我删除了旧的,因为你们大拇指已将它击倒三次,因为我曾经对你说过一些令人反感的话。我已经修改了它的固定版本,因为我认为-3评分会让我有机会真正获得一个完美正确的问题的合理答案。 – 2010-08-30 00:55:49

+5

当你得到-3票时,它不是*“完全正确的问题”。 – 2010-08-30 01:09:09

+1

-1,您的代码无效PHP。请发布您实际使用的代码,因为代码问题通常与代码本身有关。 – 2010-08-30 01:12:27

回答

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()与指定的搜索值。

然后,使用相同的$草堆和高于$针:

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

这将返回:

Array ([0] => 3) 

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

+0

是的,我曾考虑过这一点,但它看起来效率很低。我想我可能只需要去...谢谢。 – 2010-08-30 01:14:13

+0

基督徒,我编辑了我的答案,包括一个建议,使用包含可选搜索参数的array_keys。这可能是你在找什么。 – kevtrout 2010-08-30 01:18:27

0

不是很确定你在问什么,但是在PHP中使用 三重等号(===)来实现严格的比较。这意味着值和类型必须相同。 所以如果你用===比较一个字符串“1”和一个整数1,它会失败。 如果严格为假,那么比较字符串“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; 
        } 
       } 

      } 
     } 

} 
+0

奇怪的是当我做一个数组搜索 - 就像我在我的问题中所展示的那样 - 它包含了包含该字符串的第一个项目,而不是该字符串的项目。法拉? – 2010-08-30 01:06:04

+0

您发布的代码没有美元符号作为变量名称的前缀......如果它们是字符串,它们应该用双引号 – 2010-08-30 01:08:18

+0

是的,我明白,但那只是因为它是演示该概念的演示片段。在实际的代码示例中,这些元素将在那里。 – 2010-08-30 01:15:19

1

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

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

如果您需要某种特殊的比较,但它们中没有任何一个比较(例如比较对象的元素),那么您需要编写一个循环。