如何检查PHP数组中是否存在一个或多个字符串

时间:2019-02-25 14:13:33

标签: php arrays

我知道这个平台上已经问过这个问题,但是我找不到解决问题的方法。

我想检查数组中是否存在一个或多个字符串,但是当我检查时它给我错误。

@Test
fun testOverlappingSessionDeletion() {

val realm = this.mockRealm
this.sessions = realm.where(Session::class.java).findAll() // monitor session deletions

this.sessions?.addChangeListener { t, changeSet ->

    val deletedSessions = realm.where(Session::class.java).`in`("id", changeSet.deletions.toTypedArray()).findAll()
    deletedSessions.forEach { it.cleanup() }

}

因此,我将变量$ b1放入数组

Looper.loop()

并使用 in_array 检查$ a1中是否存在$ b1

$a1 = array('J.S.S 1','J.S.S 2','J.S.S 3','S.S 1','S.S 2','S.S 3','Primary One','Primary Two','Primary Three','Primary Four','Primary Five','Primary Six');

$b1 = 'S.S 2','S.S 3'

它返回$b1 = array($b1)

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

  

$ b1 ='S.S 2','S.S 3'//这就是语法错误

     

$ b1 = array($ b1)//您不能使用断字符串创建数组

您可以通过遍历$b1数组并检查$b1中是否有$a1和{{ 1}}:

https://3v4l.org/Z4N6j     

foreach

根据echmel的评论进行编辑:

使用in_array的替代解决方案:

https://3v4l.org/YfhC6

$a1 = array('J.S.S 1','J.S.S 2','J.S.S 3','S.S 1','S.S 2','S.S 3','Primary One','Primary Two','Primary Three','Primary Four','Primary Five','Primary Six');

$b1 = ['S.S 2','S.S 3'];

$found = false;
foreach($b1 as $b) {
    if(in_array($b, $a1)) {
        $found = true;
        break;
    }
}

var_dump($found);

答案 1 :(得分:0)

这是simpler solution

$a1 = [
    'J.S.S 1',
    'J.S.S 2',
    'J.S.S 3',
    'S.S 1',
    'S.S 2',
    'S.S 3',
];

$b1 = [
    'S.S 2',
    'S.S 3'
];

if (count(array_intersect($b1, $a1)) == count($b1)) {
    echo "found";
}
else {
    echo "not found";
}

这将检查是否在$b1 中找到 $a1的所有元素。

如果您对部分匹配感到满意,则可以将支票更改为:

if (count(array_intersect($b1, $a1))) {
    echo "found";
}

在后一种情况下,如果$b1上仅存在$a1的一个或多个元素,则会得到一个匹配项。


注意:在代码中尚不清楚$b1最初是字符串还是数组。如果是字符串,则需要转换为数组。使用explode()会很困难:

例如:

$b1 = explode(',', $b1);