in_array在数组中找不到值


in_array not finding value in array

我有一个数组,它是通过如下方式分解字符串而形成的。

$interest_array = explode(',', $user->interests);

当我var_dump这个数组时,我得到

array(3) { 
    [0]=> string(19) "Acute critical care" 
    [1]=> string(11) " Cardiology" 
    [2]=> string(20) " Computed Tomography"
}

带有以下代码

if (in_array('Acute critical care', $interest_array)) {
        echo "selected";}

我输出。。。。选定。这很好,但我需要它来处理几个数组值。以以下代码为例,

if (in_array('Acute critical care', $interest_array)) {
    echo "selected_once";
}
if (in_array('Cardiology', $interest_array)) {
    echo "selected_twice";
}

我只得到一个selected once的输出,但我期望selected once的输出两次

为什么会这样。我看到很多人对in_array也有类似的问题,但我找到的解决方案都不起作用(大多数问题略有不同。我尝试过翻转数组和使用array_key_exists,但运气不好。我也尝试过preg_replace删除字符串中的空白。有人能解释一下问题是什么吗?

如果仔细查看var_dump()的输出,可以看到字符串Cardiology在开头有一个空格:

string(11) " Cardiology"
            ^

这导致in_array()没有将其检测为匹配值。要删除空间,可以在执行in_array()检查之前使用array_map()在所有数组元素上应用trim

$interest_array = explode(',', $user->interests);
$interest_array = array_map('trim', $interest_array);