0

如何在“标题”或“描述”值中过滤具有特定关键字的多维数组,如下面的数据数组:

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);
});

我在代码中遗漏了什么吗?或者,还有更好的方法。先感谢您

4

1 回答 1

0

您会收到此通知,因为 keycategoryarray。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);
});
于 2020-01-04T20:23:49.957 回答