在干草堆找到针,针是一排针

时间:2011-12-21 21:41:58

标签: php

我有一个函数,它接受一个字符串(haystack)和一个字符串数组(针),如果至少有一个针是haystack的子字符串,则返回true。编写它并不需要花费太多时间或精力,但我想知道是否有一个已经完成此功能的PHP函数。

function strstr_array_needle($haystack, $arrayNeedles){
    foreach($arrayNeedles as $needle){
        if(strstr($haystack, $needle)) return true;
    }
    return false;    
}

6 个答案:

答案 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);
    }
}