PHP搜索数组问题

PHP搜索数组问题,php,arrays,Php,Arrays,我需要进行数组\u搜索搜索我的数组,严格确保项目相同(意味着整个内容与输入值相同)。我知道PHP中array\u search()函数中的第三个变量是严格的,但我不想让它检查它是否是同一个实例,因为它不是。我该怎么做 以下是我当前使用的代码: array_search(some, array(someItem,anothervariable, yetanothervariable, some)); //output - 0 (the first item) which contains som

我需要进行
数组\u搜索
搜索我的数组,严格确保项目相同(意味着整个内容与输入值相同)。我知道PHP中
array\u 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,即确切的搜索值。

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

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

            }
        }

}

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

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

            }
        }

}

您是否愿意使用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 ) 
或者您可以使用指定的搜索值。

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

$result = array_keys($haystack,$needle,TRUE);
print_r($result);
这将返回:

Array ( [0] => 3 ) 

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

您是否愿意使用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 ) 
或者您可以使用指定的搜索值。

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

$result = array_keys($haystack,$needle,TRUE);
print_r($result);
这将返回:

Array ( [0] => 3 ) 

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

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

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


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

使用strict进行数组搜索相当于===运算符

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


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

这是一个重新发布,但我删除了旧的一个,因为我说了一些冒犯您的话,所以你们对它大拇指朝下了三次。我已经修复了它,因为我认为-3的评级会破坏我获得一个完全正确的问题的合法答案的机会。当你得到-3票时,这不是一个“完全正确的问题”。-1,你的代码无效。请发布您实际使用的代码,因为代码问题通常与代码本身有关。这是一个重新发布,但我删除了旧的一个,因为我对您说了一些冒犯性的话,所以你们三次对它嗤之以鼻。我已经修复了它,因为我认为-3的评级会破坏我获得一个完全正确的问题的合法答案的机会。当你得到-3票时,这不是一个“完全正确的问题”。-1,你的代码无效。请发布您实际使用的代码,因为代码问题通常与代码本身有关。奇怪的是,当我进行数组搜索时——正如我在问题中所显示的那样——它会显示包含该字符串的第一项,而不是该字符串的项。Falla?你发布的代码在变量名前没有美元符号…如果它们是字符串,它们应该是双引号是的,我理解,但那只是因为这是一段演示代码,展示了这个概念。在实际的代码示例中,这些元素都会出现。哦,是的,就像现实中的情况一样。奇怪的是,当我进行数组搜索时——正如我在问题中所展示的那样——它会出现包含该字符串的第一个项,而不是该字符串的项。Falla?你发布的代码在变量名前没有美元符号…如果它们是字符串,它们应该是双引号是的,我理解,但那只是因为这是一段演示代码,展示了这个概念。在一个实际的代码示例中,这些元素都会出现。哦,是的,就像在现实中一样。是的,我已经想到了这一点,但它看起来真的很低效。我想我可能不得不接受这个。。。谢谢。Christian,我编辑了我的答案,其中包含了一个建议,使用带有可选搜索参数的数组_键。这可能就是你要找的。是的,我已经想到了,但它似乎真的很低效。我想我可能不得不接受这个。。。谢谢。Christian,我编辑了我的答案,其中包含了一个建议,使用带有可选搜索参数的数组_键。这可能就是你要找的。