通过(例如:标题或描述)值中的关键字过滤多维数组(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】:

您会收到此通知,因为键 categoryarrayphp 尝试将此数组转换为字符串以应用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)的主要内容,如果未能解决你的问题,请参考以下文章

在多维数组javascript或coffeescript中获取最大值

从数组值中过滤字典

多维数组的排序顺序跨浏览器兼容并具有“自然情况”

C# 中的多维数组列表或列表?

Laravel PHP通过多个键值过滤多维数组

Python numpy 多维数组由另一个数组值过滤