【问题标题】:group mysql results in multidimensional array将mysql分组为多维数组
【发布时间】:2015-12-20 06:56:25
【问题描述】:

我有以下几点:

$variants = [
     0 => [
     "variant_name" => "iPhone 5",
     "sku_id" => "2",
     "sku" => "GLC-IPH5REDXXXL",
     "stock_total" => "10",
     "stock_left" => "10",
     "retail_price" => 1000,
     "on_sale_price" => 0
    ],
    1 => [
     "variant_name" => "Red",
     "sku_id" => "2",
     "sku" => "GLC-IPH5REDXXXL",
     "stock_total" => "10",
     "stock_left" => "10",
     "retail_price" => 1000,
     "on_sale_price" => 0
    ],
    2 => [
     "variant_name" => "iPhone 6s Plus",
     "sku_id" => "4",
     "sku" => "GLC-IPH6SP",
     "stock_total" => "5",
     "stock_left" => "5",
     "retail_price" => 1000,
     "on_sale_price" => 0
    ],
    3 => [
     "variant_name" => "iPhone 6s",
     "sku_id" => "13",
     "sku" => "GLC-IPH6S",
     "stock_total" => "5",
     "stock_left" => "5",
     "retail_price" => 1000,
     "on_sale_price" => 0
    ]
 ]

我想把它们放在下面的数组中

0 => [
 "sku_id" => "2",
 "sku" => "GLC-IPH5REDXXXL",
 "stock_total" => "10",
 "stock_left" => "10",
 "retail_price" => 1000,
 "on_sale_price" => 0,
 "options" => ['iPhone 4', 'Red'],
 "option1" => 'iPhone4',
 "option2" => 'Red',
 "option3" => null
],
1 => [
 "sku_id" => "4",
 "sku" => "GLC-IPH6SP",
 "stock_total" => "5",
 "stock_left" => "5",
 "retail_price" => 1000,
 "on_sale_price" => 0,
 "options" => ['iPhone 6s Plus'],
 "option1" => 'iPhone 6s Plus',
 "option2" => null,
 "option3" => null
],
2 => [
 "sku_id" => "13",
 "sku" => "GLC-IPH6S",
 "stock_total" => "5",
 "stock_left" => "5",
 "retail_price" => 1000,
 "on_sale_price" => 0,
 "options" => ['iPhone 6s'],
 "option1" => 'iPhone 6s',
 "option2" => null,
 "option3" => null
]
  1. 我无法用每个 variant_name 填写选项
  2. 我无法使用每个对应的 variant_name 设置 option1、option2、option3

我已经在第一个数组上尝试了一个简单的foreach($variants as $v) 循环,我让它一直工作,直到 options、option1、option2、option3 从中获得重复值。

我就是不知道怎么做,有什么建议吗?

【问题讨论】:

    标签: php mysql arrays multidimensional-array


    【解决方案1】:

    您可以使用简单的foreach(),也可以使用for()。这里的for() 效率有点低,因为它每次都运行,所以它高度重复并不断覆盖......但它有效:

     foreach($variants as $rows) {
        $sku[$rows['sku_id']]['sku_id']         =   $rows['sku_id'];
        $sku[$rows['sku_id']]['sku']            =   $rows['sku'];
        $sku[$rows['sku_id']]['stock_total']    =   $rows['stock_total'];
        $sku[$rows['sku_id']]['stock_left']     =   $rows['stock_left'];
        $sku[$rows['sku_id']]['retail_price']   =   $rows['retail_price'];
        $sku[$rows['sku_id']]['on_sale_price']  =   $rows['on_sale_price'];
        $sku[$rows['sku_id']]['options'][]      =   $rows['variant_name'];
    
        for($i = 0; $i < 3; $i++)
            $sku[$rows['sku_id']]['option'.($i+1)]  =   (isset($sku[$rows['sku_id']]['options'][$i]))? $sku[$rows['sku_id']]['options'][$i] : NULL;
     }
    
    echo print_r(array_values($sku));
    

    给你:

    Array
        (
            [0] => Array
                (
                    [sku] => GLC-IPH5REDXXXL
                    [stock_total] => 10
                    [stock_left] => 10
                    [retail_price] => 1000
                    [on_sale_price] => 0
                    [options] => Array
                        (
                            [0] => iPhone 5
                            [1] => Red
                        )
    
                    [option1] => iPhone 5
                    [option2] => Red
                    [option3] => 
                )
    
            [1] => Array
                (
                    [sku] => GLC-IPH6SP
                    [stock_total] => 5
                    [stock_left] => 5
                    [retail_price] => 1000
                    [on_sale_price] => 0
                    [options] => Array
                        (
                            [0] => iPhone 6s Plus
                        )
    
                    [option1] => iPhone 6s Plus
                    [option2] => 
                    [option3] => 
                )
    
            [2] => Array
                (
                    [sku] => GLC-IPH6S
                    [stock_total] => 5
                    [stock_left] => 5
                    [retail_price] => 1000
                    [on_sale_price] => 0
                    [options] => Array
                        (
                            [0] => iPhone 6s
                        )
    
                    [option1] => iPhone 6s
                    [option2] => 
                    [option3] => 
                )
        )
    

    【讨论】:

    • 感谢您的评论,但我已经修复了它:)我会在下面发布答案。你的答案很相似,但我的解决方案有点不同
    【解决方案2】:

    解决方案

    $result = [];
    
    foreach($variants as $v) {
        $result[$v['sku_id']]['sku_id'] = $v['sku_id'];
        $result[$v['sku_id']]['sku'] = $v['sku'];
        $result[$v['sku_id']]['stock_left'] = $v['stock_left'];
        $result[$v['sku_id']]['retail_price'] = price($v['retail_price']);
        $result[$v['sku_id']]['options'][] = $v['variant_name'];
    
        if(isset($result[$v['sku_id']]['options'][0])) {
            $result[$v['sku_id']]['option1'] = $result[$v['sku_id']]['options'][0]; 
        }
        else {
            $result[$v['sku_id']]['option1'] = null;        
        }
    
        if(isset($result[$v['sku_id']]['options'][1])) {
            $result[$v['sku_id']]['option2'] = $result[$v['sku_id']]['options'][1]; 
        }
        else {
            $result[$v['sku_id']]['option2'] = null;        
        }
    
        if(isset($result[$v['sku_id']]['options'][2])) {
            $result[$v['sku_id']]['option3'] = $result[$v['sku_id']]['options'][2]; 
        }
        else {
            $result[$v['sku_id']]['option3'] = null;        
        }
    }
    
    return $result;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多