2016-03-02 156 views
-2

我有一個數組,其中包含服裝AttributesVariations,每個屬性具有未知數量的變體。php多維數組分組

數組我是這樣的......

array(
(int) 0 => array(
    'Variation' => array(
     'title' => '40 inch' 
    ), 
    'Attribute' => array(
     'title' => 'Size' 
    ) 
), 
(int) 1 => array(
    'Variation' => array(
     'title' => '42 inch' 
    ), 
    'Attribute' => array(
     'title' => 'Size' 
    ) 
), 
(int) 2 => array(
    'Variation' => array(
     'title' => 'Long' 
    ), 
    'Attribute' => array(
     'title' => 'Length' 
    ) 
), 
(int) 3 => array(
    'Variation' => array(
     'title' => 'Short' 
    ), 
    'Attribute' => array(
     'title' => 'Length' 
    ) 
) 
) 

,我想組和重新排序它給這個

array(
(int) 0 => array(
    'Attribute' => array(
     'title' => 'Size', 
    ), 
    'Variation' => array(
     (int) 0 => array(
      'title' => '40 inch', 
     ), 
     (int) 1 => array(
      'title' => '42 inch', 
     ) 
    ) 
), 
(int) 1 => array(
    'Attribute' => array(
     'title' => 'Length', 
    ), 
    'Variation' => array(
     (int) 0 => array(
      'title' => 'Short', 
     ), 
     (int) 1 => array(
      'title' => 'Long', 
     ) 
    ) 
), 
) 

任何幫助將非常感激。

編輯:

我設法非常簡單地解決它像這樣

$res=[]; 

foreach($test as $row){ 
    $res[$row['Attribute']['title']][]=$row['Variation']['title']; 
} 

這給了我這個

array(
'Size' => array(
    (int) 0 => '40 inch', 
    (int) 1 => '42 inch', 
), 
'Length' => array(
    (int) 0 => 'Long', 
    (int) 1 => 'Short', 
), 
) 

和那件事情我可以工作。 感謝大家的意見。 我upvoted所有的答案,但作爲我只是一個新手在這裏它不公開顯示。

+0

你沒有提到你有什麼嘗試和在哪裏面臨錯誤。 – RJParikh

+0

感謝大家的回答,我實際上解決了這個問題 $ res = []; foreach($ test as $ row){ \t $ res [$ row ['Attribute'] ['title']] [] = $ row ['Variation'] ['title']; } –

回答

0

雖然index S代表主陣列將是不同的,他可以幫助 -

$new= array(); 

foreach($var as $arr) { 

    $new[$arr['Attribute']['title']]['Attribute']['title'] = $arr['Attribute']['title']; 
    $new[$arr['Attribute']['title']]['Variation'][] = array('title' => $arr['Variation']['title']); 

} 

Demo

0
<?php 
$old = array(
    (int) 0 => array(
     'Variation' => array(
      'title' => '40 inch' 
     ), 
     'Attribute' => array(
      'title' => 'Size' 
     ) 
    ), 
    (int) 1 => array(
     'Variation' => array(
      'title' => '42 inch' 
     ), 
     'Attribute' => array(
      'title' => 'Size' 
     ) 
    ), 
    (int) 2 => array(
     'Variation' => array(
      'title' => 'Long' 
     ), 
     'Attribute' => array(
      'title' => 'Length' 
     ) 
    ), 
    (int) 3 => array(
     'Variation' => array(
      'title' => 'Short' 
     ), 
     'Attribute' => array(
      'title' => 'Length' 
     ) 
    ) 
); 
$new = array(); 
$attr = ''; 
$i = -1; 
foreach ($old as $arr) { 
    if($attr != $arr['Attribute']['title']){ 
     $attr = $arr['Attribute']['title']; 
     $i++; 
    } 
    $new[$i]['Attribute']['title'] = $arr['Attribute']['title']; 
    $new[$i]['Variation'][] = array('title' => $arr['Variation']['title']); 
} 
print_r($new); 
?> 

輸出爲:

Array 
(
    [0] => Array 
     (
      [Attribute] => Array 
       (
        [title] => Size 
       ) 

      [Variation] => Array 
       (
        [0] => Array 
         (
          [title] => 40 inch 
         ) 

        [1] => Array 
         (
          [title] => 42 inch 
         ) 

       ) 

     ) 

    [1] => Array 
     (
      [Attribute] => Array 
       (
        [title] => Length 
       ) 

      [Variation] => Array 
       (
        [0] => Array 
         (
          [title] => Long 
         ) 

        [1] => Array 
         (
          [title] => Short 
         ) 

       ) 

     ) 

)