将 2 个数组连接在一起可改进代码


Joining 2 arrays together code improvement

有 2 个数组。一个由类别组成,一个由产品组成。每个产品都与其特定类别相关。我想将每个产品加入其正确的类别(一个类别可以有多个产品)。每个"找到"其类别的产品都将进入此类别的产品数组中。

这是我的代码:

for ($i = 0; $i < count($prods); $i++)
{
    for ($u = 0; $u < count($cats); $u++)
    {
        if ($prods[$i]['category_code'] === $cats[$u]['category_style_code'])
        {
            if ( !isset($cats[$u]['products']) )
            {
                $cats[$u]['products'] = array();
            }
            array_push($cats[$u]['products'], $prods[$i]);
        }
    }
}

它的结果如下:

Array
(
    [0] => Array
        (
            [id] => 1
            [category_style_code] => GA
            [products] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [default_price] => 37.50
                            [category_code] => GA
                        )
                    [1] => Array
                        (
                            [id] => 2
                            [default_price] => 15.00
                            [category_code] => GA
                        )
                )
        )
)

假设有很多类别和许多产品...您将如何优化此代码(或者以不同的方式进行,也许可以使用PHP函数)?

编辑:我还想使生成的数组索引成为其类别代码。

我可能会这样做:

foreach( $prods as $prod ){
    foreach ($cats as &$cat){
        if ( $prod['category_code'] == $cat['category_style_code'] ) {
             $cats['products'][] = $prod;
             break;
        }
    }
}

并将类别数组键设置为类别代码:

foreach( $cats as $k => &$cat ){
     $cats[ $cat['category_style_code'] ] = $cat;
     unset($cats[$k]);
}

我已经尝试了另一个答案中使用的与号。希望这能奏效。如果没有,还有另一种方法。

为了让它变得更好一点,你可以做的是:

  • 使用foreach。

  • 按引用使用类别。

这样代码将如下所示:

foreach ($products as $product) {
    foreach ($categories as &$category) {
        if (!isset($category['Products'])) {
            $category['Products'] = array();
        }
        if ($product['category_code'] === $category['category_style_code']) {
            $category['Products'][] = $product;
        }
    }
}

编辑使用 PHP> 5.5.0,您可以使用以下代码将 category_style_code 列作为键:

$keys = array_column($categories, 'category_style_code');
$categories = array_combine($keys, $categories);

这将组合一个使用 $categories 作为值和$keys作为键的数组,$keys我们在其中选取category_style_code列中的所有值。