0

我有代码需要检查每次长度都会变化的特定字符串是否在数组中的字符串内,该字符串每次长度也会变化。

我可以使用'strstr'检查文本是否在特定字符串中,我可以使用'in_array'检查字符串是否在数组中,但我似乎无法将两者连接起来。

尽可能简单地说:

$array = array([0]=>'12345',[1]=>'67890');
if(in_array(strstr(3,$array)))
= true
or
= 0 (being the key)

(显然这行不通,但希望它有助于展示我正在尝试做的事情)

我已经考虑将数组分解成多个部分并以这种方式单独比较每个部分,但我担心数组的大小以及它必须在一次运行中完成此操作的次数可能会导致速度问题。此外,如果有一种更清洁的方式,任何人都可以想到它会更好。

4

4 回答 4

1

您可以使用 PHP 中的函数式编程来实现它。自 PHP 5.3 以来,它得到了很大的改进。但是,我不得不承认,我认为即使找到了元素,它也会遍历整个数组。迭代解决方案(见下文)可能会停止。

函数式的解决方案可能看起来也有点复杂,所以如果你不明白,只需使用下面的迭代式即可;)我只是写了它,因为我认为函数式通常对于数组任务来说是优雅的。

<?php

function checkIfInArrayString($array, $needle) {
    $found = array_reduce($arr, function($isFound, $value) use ($needle) {
        return $isFound || false !== strpos($value, $needle);
    }, false);

    return $found;
}

$arr = array(
    'foo',
    'my',
    'test'
);

var_dump(checkIfInArrayString($arr, 'oo'));
var_dump(checkIfInArrayString($arr, 'ooo'));

这是同一问题的迭代解决方案(未经测试):

function checkIfInArrayString($array, $searchingFor) {
    foreach ($array as $element) {
        if (strpos($element, $searchingFor) !== false) {
            return true;
        }
    }
    return false;
}

我使用strpos了代替strstr,因为当您只需要知道一个字符串是否与另一个字符串一起时,PHP 文档建议使用它。strpos返回的信息更少,因此实现更轻松。

于 2013-03-27T17:34:28.780 回答
0

如果这就是你想要做的,我不能完全确定你的问题,但看起来一个简单的 preg_match() 可以解决你的问题。假设您正在寻找包含在字符串 " somethingsomething"... hello world..." " 中的字符串 "hello world somethingelse"。

您只需使用

preg_match(/somethingsomething(.*)hello world(.*)somethingelse/, $haystack); //return 1 if found

一个更简洁的示例:如果您str在两次出现的::

preg_match(/::(.*)str(.*)::/, $haystack); //if (found) return 1; 
                                          //if (!found) return 0; 
                                          //if (err) return false;

$multiple_occurences = /::(.*)(str)(.*)::/;
$single_occurence    = /::(.*)str(.*)::/;

我希望这让它更清楚一点。如果您对 preg_match() 方法有任何疑问,文档非常有帮助:preg_match() 文档。

于 2013-03-27T17:25:20.890 回答
0

我意识到这已经很老了,但现在有preg_grep()

$array = array([0]=>'12345',[1]=>'67890');
$result = preg_grep('/3/',$array);
于 2017-08-29T17:23:00.170 回答
0
            if ( in_array("search string", $array) ) echo "search string is in the array";
于 2017-12-14T14:28:23.563 回答