通过(例如:标题或描述)值中的关键字过滤多维数组(PHP)
Posted
技术标签:
【中文标题】通过(例如:标题或描述)值中的关键字过滤多维数组(PHP)【英文标题】:Filter multidimensional array by keywords in (ex: title or description) values (PHP) 【发布时间】:2020-01-04 20:20:22 【问题描述】:如何过滤'title'或'description'值中带有特定关键字的多维数组,如下面的数据数组:
Array
(
[0] => Array
(
[id] => 873
[title] => Mark
[description] => John Doe Billy
[category] => Array
(
[id] => 52
[name] => Wall Art
)
)
[1] => Array
(
[id] => 266
[title] => Ninja Turle
[description] => Mark Doe
[category] => Array
(
[id] => 52
[name] => Wall Art
)
)
[2] => Array
(
[id] => 227
[title] => Red Rose
[description] => Billy Jean
[category] => Array
(
[id] => 52
[name] => Wall Art
)
)
)
以前我使用下面的代码,它可以根据我的需要工作和显示,但同时我收到错误消息“注意:数组到字符串的转换”。
$search = "/mark/i";
$products = array_filter($data, function($a) use($search)
return preg_grep($search, $a);
);
我是否遗漏了代码中的某些内容?或者,还有更好的方法。 提前谢谢你
【问题讨论】:
【参考方案1】:您会收到此通知,因为键 category
是 array。 php 尝试将此数组转换为字符串以应用preg_grep
,这就是您收到此警告的原因。我想你可以这样做:
$search = "mark";
$products = array_filter($data, function($a) use($search)
return false !== stripos($a['title'], $search)
|| false !== stripos($a['description'], $search);
);
更新变体 - 取消设置数组值并在其余值(即字符串)上运行 preg_grep
:
$search = "/mark/i";
$products = array_filter($data, function($a) use($search)
unset($a['category']);
return preg_grep($search, $a);
);
【讨论】:
成功了,谢谢。你认为这是正确的方法吗?还是有更好的方法? 我的回答有助于避免警告。我没有看到更好的方法,当数组的所有元素都是字符串时,preg_grep
很好。您也可以unset
category
键并仍然使用preg_grep
,也许这是一个更好的解决方案 - 更新的答案,但如果在$a
中会有更多的子数组,你也必须unset
他们。此外,作为一个 hack - 可以使用 @
运算符来抑制警告,但这是我将使用的最后一个解决方案。以上是关于通过(例如:标题或描述)值中的关键字过滤多维数组(PHP)的主要内容,如果未能解决你的问题,请参考以下文章