为了账号安全,请及时绑定邮箱和手机立即绑定

过滤和计数过滤后的数组

过滤和计数过滤后的数组

PHP
慕盖茨4494581 2021-10-08 14:33:41
我正在尝试过滤多维数组并返回为给定类别找到的条目数。编辑我试图避免使用 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 entriesecho $row_count=count($filter_category);//return number of entries所需的结果应返回与下面看到的完全相同的数组,但仅包含过滤条目。如果有更好的方法来做我想做的事情。我开了!
查看完整描述

2 回答

?
largeQ

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.


如果您的数据中有真实的关键字,而不是尝试匹配产品名称中的词,事情会容易得多。


查看完整回答
反对 回复 2021-10-08
?
幕布斯6054654

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

如果你也想要我,我可以解释它是如何工作的。


查看完整回答
反对 回复 2021-10-08
  • 2 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信