我有一个函数,它接受一个字符串(haystack)和一个字符串数组(针),如果至少有一个针是haystack的子字符串,则返回true。编写它并不需要花费太多时间或精力,但我想知道是否有一个已经完成此功能的PHP函数。
function strstr_array_needle($haystack, $arrayNeedles){
foreach($arrayNeedles as $needle){
if(strstr($haystack, $needle)) return true;
}
return false;
}
答案 0 :(得分:9)
只是一个建议......
function array_strpos($haystack, $needles)
{
foreach($needles as $needle)
if(strpos($haystack, $needle) !== false) return true;
return false;
}
答案 1 :(得分:1)
我认为最接近的函数是array_walk_recursive(),但这需要回调。所以使用它可能比你已经拥有的更复杂。
答案 2 :(得分:0)
我不确定你想要做什么,但我认为in_array()
可以帮助你做你正在寻找的事情。
$needleArray = array(1, 2, 3); // the values we want to get from
$outputArray = array( ... ); // the values to search for
foreach ($outputArray as $value) {
if (in_array($value, $needleArray)) {
// do what you want to do...the $value exists in $needleArray
}
}
答案 3 :(得分:0)
如果您只想确定大海捞针中存在哪些针头,我建议使用array_intersect
功能。
PHP.net网站上的文档
<?php
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print_r($result);
?>
The above example will output:
Array
(
[a] => green
[0] => red
)
基本上,这将导致一个数组显示两个数组中出现的所有值。在您的情况下,如果找到任何针,您的代码将返回true。以下代码将使用array_intersect
函数执行此操作,但如果这比查尔斯的答案更简单,则可以辩论。
if(sizeof(array_intersect($hackstack, $arrayNeedles)) > 0)
return true;
else
return false;
同样,我不确定你的代码究竟在做什么,除了在任何针存在时返回true。如果您可以提供有关您想要实现的目标的上下文,则可能有更好的方法。
希望这有帮助。
答案 4 :(得分:0)
没有单一的函数表现为strstr_array_needle
(该名称具有误导性;我希望它返回$haystack
的子字符串)。还有其他功能可用于代替循环,但它们没有好处并且需要更多时间。例如:
# iterates over entire array, though stops checking once a match is found
array_reduce($needles,
function($found, $needle) use ($haystack) {
return $found || (strpos($haystack, $needle) !== false);
},
false);
# iterates over entire array and checks each needle, even if one is already found
(bool)array_filter($needles,
function($needle) use ($haystack) {
return strpos($haystack, $needle) !== false;
});
答案 5 :(得分:0)
这是一个经过测试和运作的功能:
<?php
function strpos_array($haystack, $needles, $offset = 0) {
if (is_array($needles)) {
foreach ($needles as $needle) {
$pos = strpos_array($haystack, $needle);
if ($pos !== false) {
return $pos;
}
}
return false;
} else {
return strpos($haystack, $needles, $offset);
}
}