有 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列中的所有值。