我有一个类似
的数组$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%condition.How可以在PHP数组中完成吗?
答案 0 :(得分:2)
检查字符串是否匹配时,您可以使用strpos
strpos($strToCheck, 'Gra') !== false;//Will match if $strToCheck contains 'Gra'
strpos($strToCheck, 'Gra') === 0; //Will match if $strToCheck starts with 'Gra'
请注意,以上内容区分大小写。对于不区分大小写的情况,您可以在比较使用strripos
之前 strtoupper
两个字符串。
在您的示例中,检查将变为:
if (isset($array[$key]) && strpos($array[$key],$value) !== false) {
$results[] = $array;
}
答案 1 :(得分:1)
你可以在php中使用stristr函数进行字符串操作,你不必考虑不同的情况并将它们转换为大写。
stristr 功能不区分大小写,因此您的代码会喜欢这个
if (isset($array[$key]) && stristr($array[$key], $value) !== false) {
$results[] = $array;
}
答案 2 :(得分:0)
专注于你写的这一行 -
if (isset($array[$key]) && $array[$key] == $value) {
我们可以修改它来搜索子字符串,而不是完全匹配 -
if (isset($array[$key]) && strpos($array[$key], $value)) {
这将尝试查找该值是否出现在$array[$key]
希望有所帮助