过滤和计数过滤后的数组

我正在尝试过滤多维数组并返回为给定类别找到的条目数。


编辑


我试图避免使用 foreach。现在正在考虑使用array_intersect但获取数组到字符串转换错误。我正在这样做:


//filter array with category name

$category_array = array('T-Shirt','Men');

$filter_category = (array_intersect($products['result'], $category_array));

var_export($filter_category);//return data of filtered entries

echo $row_count=count($filter_category);//return number of entries

所需的结果应返回与下面看到的完全相同的数组,但仅包含过滤条目。如果有更好的方法来做我想做的事情。我开了!


慕盖茨4494581
浏览 145回答 2
2回答

largeQ

您可以array_filter为此使用。将您的类别数组转换为匹配所有单词的正则表达式;请参阅以任何顺序匹配查询中的所有单词的正则表达式。然后preg_match()在过滤功能中使用。$regexp = '/(?=.*\bt-shirt\b)(?=.*\bmen\b)/i';$fl_list = array_filter(function($p) use ($regexp) {    return preg_match($regexp, $p['name']);}, $products['result']);我也在\b我的正则表达式中使用,使其匹配整个单词。否则,men将匹配women.如果您的数据中有真实的关键字,而不是尝试匹配产品名称中的词,事情会容易得多。

幕布斯6054654

像这样的东西:$category_array = array('T-Shirt', 'camo');print_r(  array_intersect_key(      $products['result'],      preg_grep(          '/(?=.*\b'.implode('\b)(?=.*\b', $category_array).'\b)/i',          array_column($products['result'], 'name')      )  ));输出:Array(    [0] => Array        (            [id] => 121935189            [external_id] => 5d27b7962ac2c1            [name] => RPROD7742019 Dark Green Bush Camo Men's T-Shirt             [variants] => 6            [synced] => 6        )    [1] => Array        (            [id] => 121934788            [external_id] => 5d27b641b1f568            [name] => RPROD2282019 FOREST GREEN CAMO Men's T-shirt            [variants] => 6            [synced] => 6        )    [5] => Array        (            [id] => 121933319            [external_id] => 5d27b12e253032            [name] => RPROD7662019 DARK GREEN CAMO Men's T-Shirt - Men            [variants] => 6            [synced] => 6        )    [6] => Array        (            [id] => 121931543            [external_id] => 5d27afd7c949b8            [name] => RPROD1192019 Jungle Camo Men's T-Shirt - Men            [variants] => 6            [synced] => 6        )    [7] => Array        (            [id] => 121930567            [external_id] => 5d27ae02dd00a8            [name] => RPROD7572019 Camo Short sleeve men’s t-shirt - Men            [variants] => 6            [synced] => 6        )    [8] => Array        (            [id] => 121930354            [external_id] => 5d27ad2a338399            [name] => RPROD8412019 Camo Men's T-shirt - Men            [variants] => 6            [synced] => 6        ))它们都包含“男人”,所以我不确定过滤规则应该是什么。无论如何,经过一些调整后,我改用了“迷彩”。PS,如果您想更新数组,那么只需执行此操作而不是print_r:$products['result'] = array_intersect_key( ... other code ... );如果你也想要我,我可以解释它是如何工作的。
打开App,查看更多内容
随时随地看视频慕课网APP