2 回答
TA贡献2039条经验 获得超7个赞
您可以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.
如果您的数据中有真实的关键字,而不是尝试匹配产品名称中的词,事情会容易得多。
TA贡献1876条经验 获得超7个赞
像这样的东西:
$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 ... );
如果你也想要我,我可以解释它是如何工作的。
- 2 回答
- 0 关注
- 144 浏览
添加回答
举报