PHP:检查多维数组是否包含值的一部分



考虑这样的数组:

$my_array = array(    
0 =>  array(  
"Date"   => "20220901",  
"Description"   => "My name is Jack"  

),  
1   =>  array(  
"Date"   => "20220901",  
"Description"   => "I have a dog"
), 
2   =>  array(  
"Date" =>  "20220901",  
"Description"   => "I have a house"
)
);

如果搜索值"Jack",如何返回truefalse。换句话说,如何在数组中搜索单词Jack并返回truefalse(如果存在(?记住,"Jack"只是价值的一部分,而不是全部价值,即"我叫Jack"。

这是我尝试过的,但它返回错误,因为我没有提供完整的值:

if (array_search("Jack", array_column($my_array, 'Description')) !== false) {
echo 'True';
} else {
echo 'False';
}

这里有一种使用array_filter查找所有匹配项的方法。要使其成为布尔,可以在!!前面加前缀。

你也可以使用

if ($matches) { doSomething(); } else { echo "Empty"; }

而不是

if (!!$matches) { doSomething(); } else { echo "Empty"; }

这样做的优点是,您还可以计算以下示例的结果。

echo count($matches);

示例

$needle = 'Jack';
$matches = array_filter($my_array, fn($item) => false !== strpos($item['Description'], $needle));
print_r($matches);
$hasNeedle = !!$matches;
var_dump($hasNeedle);

输出

Array
(
[0] => Array
(
[Date] => 20220901
[Description] => My name is Jack
)
)

bool(true)

array_search正在进行严格的搜索,我认为您可以使用strpos((,如下例所示。

function searchInArray($rawArray, $search, $column) {
foreach ($rawArray as $value) {
if (isset($value[$column]) && strpos($value[$column], $search) !== false) {
return true;
}
}

return false;    
}
echo searchInArray($my_array, "Jack", "Description");

最新更新