考虑这样的数组:
$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",如何返回true
或false
。换句话说,如何在数组中搜索单词Jack
并返回true
或false
(如果存在(?记住,"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");