如果一个数组与一个特定字段匹配,我将如何返回该数组。
为了更清楚,假设我有一个看起来像这样的数组---
[1] => Array
(
[id] => 11
[category] => phone cases
[sale_price] => 90,99
[price] => 120
[product_name] => "iphone 6 plus" case transparent
)
[2] => Array
(
[id] => 13
[category] => shoes
[sale_price] => 180,99
[price] => 200
[product_name] => blue platform shoes
)
[3] => Array
(
[id] => 14
[category] => wallet
[sale_price] => 150
[price] => 250
[product_name] => valvet wallet
所以我想要的是,如果我搜索 valvet ,它应该在数组的 [product_name] 字段中搜索并返回包含其他字段的数组同样。
例如---
如果我搜索 valvet ,它应该返回 -
[0] => Array
(
[id] => 14
[category] => wallet
[sale_price] => 150
[price] => 250
[product_name] => valvet wallet
)
这是我的PHP代码,我正在尝试做什么 -
$data = 'plus'; // what i want to search
$search = my_array_search($all_data, $data);
function my_array_search($array, $string)
{
$ret = false;
$pattern = preg_replace('/\s+/', ' ', preg_quote($string, '/'));
foreach($array AS $k => $v) {
$res = preg_grep('/' . $pattern . '/', $v);
if(!empty($res)) $ret[$k] = $res;
}
return $ret;
}
但它只返回["product_name"]
而不是匹配的数组!!
我如何解决这个问题,有人可以帮助我解决这个问题!!!
答案 0 :(得分:2)
为什么不用$ret
填充$v
?
function my_array_search($array, $string)
{
$ret = false;
$pattern = preg_replace('/\s+/', ' ', preg_quote($string, '/'));
foreach($array AS $k => $v) {
$res = preg_grep('/' . $pattern . '/', $v);
if(!empty($res)) $ret[$k] = $v;
}
return $ret;
}
答案 1 :(得分:2)
preg_grep - 返回与模式匹配的数组条目
因此,在您的情况下,它会返回product_name
。你需要整个阵列,你搜索即。 $v
:
if (!empty($res)) $ret[$k] = $v;