2017-11-12 6 views
3

このような配列のグループ繰り返される値への最善の方法だろう何:そうのような出力配列を得るためにPHPで多次元連想配列の繰り返し値をグループ化する方法はありますか?

$array = [ 
     0 => ['id'=>1, 'name'=>'prod1', 'type'=>'a', 'price'=>2.50], 
     1 => ['id'=>1, 'name'=>'prod1', 'type'=>'b', 'price'=>5.50], 
     2 => ['id'=>1, 'name'=>'prod1', 'type'=>'c', 'price'=>10.50], 
     3 => ['id'=>2, 'name'=>'prod2', 'type'=>'a', 'price'=>3.50], 
     4 => ['id'=>2, 'name'=>'prod2', 'type'=>'b', 'price'=>7.50] 
     ]; 

$sorted_array = [ 
    0 => ['id'=>1, 'name'=>'prod1', 'type'=>['a' => ['price'=>2.50], 
              'b'=> ['price'=>5.50], 
              'c'=> ['price'=>10.50] 
              ] 
     ], 
    1 => ['id'=>2, 'name'=>'prod2', 'type'=>['a'=>['price'=>3.50], 
              'b'=>['price'=>7.50] 
              ] 
      ] 

    ]; 
+1

あなたがこれまでに試したことを私たちに教えてください。 –

答えて

1

これは正確ではありません最良の方法それを行うには、それはあなたが欲しいものを行います。

$sorted_array = []; 
for($i = 0; $i < count($array); $i++){ 
    $k = $array[$i]['id']-1; 
    if($sorted_array[$k] == null){ 
     $sorted_array[$k]['id'] = $array[$i]['id']; 
     $sorted_array[$k]['name'] = $array[$i]['name']; 
    } 
    $sorted_array[$k]['type'][$array[$i]['type']]['price'] = $array[$i]['price']; 
} 

私はあなたのアレイとGOTを使用して、ローカルサーバー上でそれを試してみましたこれは:

Array 
(
[0] => Array 
    (
     [id] => 1 
     [name] => prod1 
     [type] => Array 
      (
       [a] => Array 
        (
         [price] => 2.5 
        ) 

       [b] => Array 
        (
         [price] => 5.5 
        ) 

       [c] => Array 
        (
         [price] => 10.5 
        ) 

      ) 

    ) 

[1] => Array 
    (
     [id] => 2 
     [name] => prod2 
     [type] => Array 
      (
       [a] => Array 
        (
         [price] => 3.5 
        ) 

       [b] => Array 
        (
         [price] => 7.5 
        ) 

      ) 

    ) 

) 
0

Zeke、コンパイラが「未定義のオフセット」について不平を言っていたため、私はあなたのアプローチを少し変更しました。

これが今どのようにある:

$sorted_array = []; 

for($i = 0; $i < count($array); $i++){ 
    if($i == 0){ 
     $sorted_array[$i]['id'] = $array[$i]['id']; 
     $sorted_array[$i]['name'] = $array[$i]['name']; 
     $sorted_array[$i]['type'][$array[$i]['type']]['price'] = $array[$i]['price']; 
    }else{ 
     $last = end($sorted_array); 
     $key = key($sorted_array); 
     if($last['id']==$array[$i]['id']){ 
      $sorted_array[$key]['type'][$array[$i]['type']]['price'] = $array[$i]['price']; 
     }else{ 
      $k = $key+1; 
      $sorted_array[$k]['id'] = $array[$i]['id']; 
      $sorted_array[$k]['name'] = $array[$i]['name']; 
      $sorted_array[$k]['type'][$array[$i]['type']]['price'] = $array[$i]['price']; 
     } 
    } 
} 

は出力:

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [name] => prod1 
      [type] => Array 
       (
        [a] => Array 
         (
          [price] => 2.5 
         ) 

        [b] => Array 
         (
          [price] => 5.5 
         ) 

        [c] => Array 
         (
          [price] => 10.5 
         ) 

       ) 

     ) 

    [1] => Array 
     (
      [id] => 2 
      [name] => prod2 
      [type] => Array 
       (
        [a] => Array 
         (
          [price] => 3.5 
         ) 

        [b] => Array 
         (
          [price] => 7.5 
         ) 

       ) 

     ) 

) 

おかげで百万ジーク、あなたの答えは私をたくさん助けました。

+0

それも別の方法です!私の答えはあなたを助けてくれてうれしいです。あなたが望むなら、それを正解とマークしてください!私は '未定義のオフセット'が何であるか知っていますが、私は答えの目的のためにそれらを無視しました。がんばろう! – Zeke

関連する問題