Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将2个阵列连接在一起代码改进_Php - Fatal编程技术网

Php 将2个阵列连接在一起代码改进

Php 将2个阵列连接在一起代码改进,php,Php,有两个阵列。由类别和产品组成的一个。每种产品都属于其特定类别。我想将每个产品加入到其正确的类别中(一个类别可以有多个产品)。“找到”其类别的每个产品都将进入该类别的产品数组 这是我的密码: for ($i = 0; $i < count($prods); $i++) { for ($u = 0; $u < count($cats); $u++) { if ($prods[$i]['category_code'] === $cats[$u]['categ

有两个阵列。由类别和产品组成的一个。每种产品都属于其特定类别。我想将每个产品加入到其正确的类别中(一个类别可以有多个产品)。“找到”其类别的每个产品都将进入该类别的产品数组

这是我的密码:

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]);
        }
    }
}
比如说有很多种类和很多产品。。。您将如何优化此代码(或者以不同的方式进行优化,可能会使用PHP函数)

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

我可能会这样做:

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\u style\u code列中拾取的所有值。

这不起作用,因为它只会在迭代中向
$categories
值添加产品数组,而不是原始的
$categories
数组。实际上它正在工作。我还有另一个请求--如何将键作为category\u style\u代码而不是索引?例如,我尝试了
$cats[$category['category\u style\u code']]=$category
但我也想取消设置上一个键/值。@vanamerongen这是我在回答“使用引用类别”时所说的@DanyP要使键成为您的“类别样式”代码列,请告诉我您正在运行的PHP的版本。根据PHP的arrat_column函数是否在5.5之后可用,代码会有很大的不同。0@thanpa是的,我不知道引用变量。太好了。这不起作用了——产品数组没有显示在更新的类别数组中。太好了,谢谢:)我想让键看起来像类别样式代码——这样当我使用它时,我就可以只做$cats['GA']。以最佳方式取消设置/删除重复行(不保留索引键/值的数量)啊,当然,您可以使用另一个foreach循环。我将添加它。酷,关键关联部分正在工作,但未设置部分没有工作。旧的值被保留。在这种情况下,没有符号,它可以工作:)谢谢
$keys = array_column($categories, 'category_style_code');
$categories = array_combine($keys, $categories);