每个类别从PHP中的数组获取3个元素

时间:2019-04-03 10:58:03

标签: php arrays foreach

我有2个数组categoryproduct_to_category(如下所示的结构)

[category] => Array
    (
        [0] => 299
        [2] => 342
        [3] => 134
        [4] => 333
        [5] => 347
        [9] => 296
    )

[product_to_category] => Array
    (
        [0] => Array
            (
                [product_id] => 23895
                [category_id] => 296
                [relevance] => 77.73432159423828
            )

        [1] => Array
            (
                [product_id] => 17218
                [category_id] => 296
                [relevance] => 77.73432159423828
            )

        [2] => Array
            (
                [product_id] => 23896
                [category_id] => 347
                [relevance] => 77.73432159423828
            )
            ....So On (5000+ records)

我在product_to_category数组中有近5000多个记录,但是我想从每个类别的P2C数组中仅选择3种产品。例如category_id=299,因此将3种产品(共299种)添加到我的新阵列中,其他类别也是如此。

有没有办法做到这一点。

4 个答案:

答案 0 :(得分:0)

尝试使用此查询来获取您想要的记录,

select p2c.product_id, p2c.category_id, p2c.relevance
from category c 
LEFT JOIN product_to_category p2c ON p2c.category_id = category.category_id
GROUP BY p2c.product_id, p2c.category_id
HAVING count(*) <= 3
ORDER BY category_id, product_id

您可以将表category引用到类别表,将product_to_category引用到数据库中的表名。

答案 1 :(得分:0)

$category = [0 => 299, 2 => 342, 3 => 134, 4 => 333, 5 => 347, 9 => 296];
 $product_to_category = Array
  (
    0 => Array
    (
        'product_id' => 23895,
        'category_id' => 296,
        'relevance' => 77.73432159423828
    ),

    1 => Array
    (
        'product_id' => 17218,
    'category_id' => 296,
    'relevance' => 77.73432159423828
    ),

    2 => Array
    (
        'product_id' => 23896,
        'category_id' => 347,
        'relevance' => 77.73432159423828
    ),
    3 => Array
    (
        'product_id' => 23897,
        'category_id' => 296,
        'relevance' => 77.73432159423828
    ),
    4 => Array
    (
    'product_id' => 23899,
    'category_id' => 296,
    'relevance' => 77.73432159423828
   ),
   5 => Array
   (
    'product_id' => 23894,
    'category_id' => 347,
    'relevance' => 77.73432159423828
   ),
   6 => Array
   (
    'product_id' => 23892,
    'category_id' => 347,
    'relevance' => 77.73432159423828
   ),
   7 => Array
   (
    'product_id' => 23833,
    'category_id' => 347,
    'relevance' => 77.73432159423828
   )
);
$new_product_to_category = [];
foreach ($category as $categories) {
$count_category_ids = [];
$i=0;
foreach ($product_to_category as $product_to_categories){
    if ($categories == $product_to_categories['category_id']){
        $count_category_ids[] = $product_to_categories['category_id'];
        if (count($count_category_ids) < 4) {
            $new_product_to_category[$i]['product_id'] = $product_to_categories['product_id'];
            $new_product_to_category[$i]['category_id'] = $product_to_categories['category_id'];
            $new_product_to_category[$i]['relevance'] = $product_to_categories['relevance'];
        }
    }
    $i++;
}
}

echo "<pre>";
print_r($new_product_to_category);

输出显示如下:

Array
(
[2] => Array
    (
        [product_id] => 23896
        [category_id] => 347
        [relevance] => 77.734321594238
    )

[5] => Array
    (
        [product_id] => 23894
        [category_id] => 347
        [relevance] => 77.734321594238
    )

[6] => Array
    (
        [product_id] => 23892
        [category_id] => 347
        [relevance] => 77.734321594238
    )

[0] => Array
    (
        [product_id] => 23895
        [category_id] => 296
        [relevance] => 77.734321594238
    )

[1] => Array
    (
        [product_id] => 17218
        [category_id] => 296
        [relevance] => 77.734321594238
    )

[3] => Array
    (
        [product_id] => 23897
        [category_id] => 296
        [relevance] => 77.734321594238
    )

 )

答案 2 :(得分:0)

$categories = array(6, 5, 3, 4, 2, 1);
        $products = array(
            array('product_id' => 231, 'category_id' => 1, 'relevance' => 321),
            array('product_id' => 232, 'category_id' => 4, 'relevance' => 322),
            array('product_id' => 233, 'category_id' => 2, 'relevance' => 323),
            array('product_id' => 234, 'category_id' => 4, 'relevance' => 324),
            array('product_id' => 235, 'category_id' => 4, 'relevance' => 325),
            array('product_id' => 236, 'category_id' => 2, 'relevance' => 326),
            array('product_id' => 237, 'category_id' => 1, 'relevance' => 327),
            array('product_id' => 238, 'category_id' => 4, 'relevance' => 328),
            array('product_id' => 239, 'category_id' => 1, 'relevance' => 329),
            array('product_id' => 240, 'category_id' => 1, 'relevance' => 330)
        );
        $categoryWiseProduct = array();
        foreach ($products as $p) {
            foreach ($categories as $c) {
                if ($c == $p['category_id']) {
                    if (isset($categoryWiseProduct[$c]) && count($categoryWiseProduct[$c]) > 2) {
                        break;
                    }
                    $categoryWiseProduct[$c][] = $p;
                }
            }
        }
        echo'<pre>';print_r($categoryWiseProduct);die;

输出将是:

Array
(
    [1] => Array
        (
            [0] => Array
                (
                    [product_id] => 231
                    [category_id] => 1
                    [relevance] => 321
                )

            [1] => Array
                (
                    [product_id] => 237
                    [category_id] => 1
                    [relevance] => 327
                )

            [2] => Array
                (
                    [product_id] => 239
                    [category_id] => 1
                    [relevance] => 329
                )

        )

    [4] => Array
        (
            [0] => Array
                (
                    [product_id] => 232
                    [category_id] => 4
                    [relevance] => 322
                )

            [1] => Array
                (
                    [product_id] => 234
                    [category_id] => 4
                    [relevance] => 324
                )

            [2] => Array
                (
                    [product_id] => 235
                    [category_id] => 4
                    [relevance] => 325
                )

        )

    [2] => Array
        (
            [0] => Array
                (
                    [product_id] => 233
                    [category_id] => 2
                    [relevance] => 323
                )

            [1] => Array
                (
                    [product_id] => 236
                    [category_id] => 2
                    [relevance] => 326
                )

        )

)

答案 3 :(得分:0)

尝试此代码

$collection = array();

foreach($arr as $key => $value){
    if(
      isset($collection[$value['category_id']])
      && 
      count($collection[$value['category_id']]) >= 3
    ) continue;

   $collection[$value['product_id']][] = $value['product_id']; 

}

通过这种方式,您将从每个类别中获得3种产品。

如果需要,您可以添加更多条件,例如检查您可以在条件中使用的产品ID

&& in_array($product_id, $collection[$value['category_id']])