2015-12-20 5 views
0

я следующие:результаты группы MySQL в многомерном массиве

$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. Я не могу установить опцию1, option2, option3 с каждым соответствующим вариантом_имя

Я пробовал простой цикл foreach($variants as $v) на первом массиве, и я получил его до тех пор, пока параметры, option1, option2, option3, из которых я не получу повторяющиеся значения.

Я просто не могу понять, как это сделать, любые предложения?

ответ

0

Вы можете использовать простой 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] => 
      ) 
    ) 
+0

спасибо за ваш комментарий, но я исправил его в разное время :) Я отправлю ответ ниже. Ваш ответ аналогичен, но мое решение немного отличается – lesandru

0

Решение

$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; 
Смежные вопросы