2016-03-02 155 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 
         ) 

       ) 

     ) 

)