我有一个类似的数组
$arr = array(0 => array(id=>1,name=>"Apple"),
1 => array(id=>2,name=>"Orange"),
2 => array(id=>3,name=>"Grape")
);
我已经编写了搜索多维数组的代码。
这是
function search($array, $key, $value)
{
$results = array();
search_r($array, $key, $value, $results);
return $results;
}
function search_r($array, $key, $value, &$results)
{
if (!is_array($array)) {
return;
}
if (isset($array[$key]) && $array[$key] == $value) {
$results[] = $array;
}
foreach ($array as $subarray) {
search_r($subarray, $key, $value, $results);
}
}
但它只适用于完全匹配的关键字。我需要的是,如果我在这个数组中搜索"Gra"。该功能应返回
array(0 => array(id=>1,name=>"Grape")
);
这似乎有点像mysql%like%条件。如何在PHP数组中做到这一点?
检查字符串是否匹配时,可以使用strpos
strpos($strToCheck, 'Gra') !== false;//Will match if $strToCheck contains 'Gra'
strpos($strToCheck, 'Gra') === 0; //Will match if $strToCheck starts with 'Gra'
请注意,以上内容区分大小写。对于不区分大小写的情况,在比较之前,可以strtoupper
两个字符串都使用strripos
。
在您的示例中,检查将变为:
if (isset($array[$key]) && strpos($array[$key],$value) !== false) {
$results[] = $array;
}
您可以在php中使用stristr函数进行字符串操作,并且不必考虑不同的情况并将其转换为大写。
stristr函数是不区分大小写的,所以你的代码会喜欢这个
if (isset($array[$key]) && stristr($array[$key], $value) !== false) {
$results[] = $array;
}
关注您写的这一行-
if (isset($array[$key]) && $array[$key] == $value) {
我们可以修改它来搜索子字符串,而不是完全匹配-
if (isset($array[$key]) && strpos($array[$key], $value)) {
这将尝试查找$array[$key]
内容中是否存在该值
希望它能帮助