Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查是否有任何数组值包含字符串-strpos_Php - Fatal编程技术网

Php 检查是否有任何数组值包含字符串-strpos

Php 检查是否有任何数组值包含字符串-strpos,php,Php,要检查字符串中是否存在子字符串,请执行以下操作: if (strpos($haystack,$needle)!==false) {...} 但需要检查是否有任何数组值包含字符串 例如:检查$arr的任何值中是否包含“oran” $arr=array('orange1','orange2','orange3') 始终可以使用strpos执行foreach并分析每个数组值 但是,有没有一个优雅而漂亮的选择呢?这个怎么样 if(strpos(implode(' ', $arr), 'oran')

要检查字符串中是否存在子字符串,请执行以下操作:

if (strpos($haystack,$needle)!==false) {...}
但需要检查是否有任何数组值包含字符串

例如:检查$arr的任何值中是否包含“oran”

$arr=array('orange1','orange2','orange3')
始终可以使用strpos执行foreach并分析每个数组值

但是,有没有一个优雅而漂亮的选择呢?

这个怎么样

if(strpos(implode(' ', $arr), 'oran') !== false){...}
您需要使用空间分隔符,以免意外执行以下操作:

$arr = array('for', 'antlr');  // implode would make 'forantlr', which contains 'oran'
这个怎么样

if(strpos(implode(' ', $arr), 'oran') !== false){...}
您需要使用空间分隔符,以免意外执行以下操作:

$arr = array('for', 'antlr');  // implode would make 'forantlr', which contains 'oran'
我知道我们都在想这个/线


我知道我们都在想这个/线程。

没有内置函数来完成此操作。
foreach
循环可能是最好的。您可以使用
array\u filter()
,但使用
foreach
可以在第一次匹配时停止,而不是检查每个元素。请尝试preg\u grep,一篇较旧的文章中有示例,但没有内置函数来执行此操作。
foreach
循环可能是最好的。你可以使用
array\u filter()
,但是使用
foreach
你可以在第一次匹配时停止,而不是检查每个元素。试试preg\u grep,一篇旧文章中的示例似乎是对一个不存在的问题的可怕的“解决方案”。用一个循环来解释为什么这很可怕。此外,op表示他知道如何使用循环,并正在寻找替代方案。这就是那。更重要的是,这很可能比使用循环快。这怎么会比只使用循环快呢?您正在构建一个庞大的字符串(使用的内存量是原来的两倍),这需要在整个数组中循环。虽然你回答了这个问题(即使现在你不能在指针上使用空格),所以也许我的评论应该是关于这个问题而不是你的答案。使用循环,你可以在匹配时中断,而使用代码,你将不得不一直读整个数组。坏例子,但是如果你的
$needle
是“abc,123;”怎么办?现在需要将分隔符更改为不在指针中的内容。但是循环应该更有效,因为当您找到匹配项(而不是构建一个(可能较大的)字符串)时,您可以停止循环。对于一个不存在的问题来说,这似乎是一个可怕的“解决方案”。用一个循环来解释为什么这很可怕。此外,op表示他知道如何使用循环,并正在寻找替代方案。这就是那。更重要的是,这很可能比使用循环快。这怎么会比只使用循环快呢?您正在构建一个庞大的字符串(使用的内存量是原来的两倍),这需要在整个数组中循环。虽然你回答了这个问题(即使现在你不能在指针上使用空格),所以也许我的评论应该是关于这个问题而不是你的答案。使用循环,你可以在匹配时中断,而使用代码,你将不得不一直读整个数组。坏例子,但是如果你的
$needle
是“abc,123;”怎么办?现在需要将分隔符更改为不在指针中的内容。但是循环应该更有效,因为当您找到匹配项时可以停止(而不是构建一个(可能较大的)字符串)。