重新创建一个数组,以便我得到我想要的结果


Recreate an array so that I get the result as I want

下面是示例数组:

 $arr = array(array (
  'country' => 
  array (
    'code' => 'in',
    'name' => 'India',
  ),
  'language' => 
  array (
    'code' => 'en',
    'name' => 'English',
  ),
),
array (
  'country' => 
  array (
    'code' => 'in',
    'name' => 'India',
  ),
  'language' => 
  array (
    'code' => 'hi',
    'name' => 'Hindi',
  ),
),
array (
  'country' => 
  array (
    'code' => 'id',
    'name' => 'Indonesia',
  ),
  'language' => 
  array (
    'code' => 'id',
    'name' => 'Indonesian',
  ),
),
array (
  'country' => 
  array (
    'code' => 'it',
    'name' => 'Italy',
  ),
  'language' => 
  array (
    'code' => 'it',
    'name' => 'Italian',
  ),
),
array (
  'country' => 
  array (
    'code' => 'jp',
    'name' => 'Japan',
  ),
  'language' => 
  array (
    'code' => 'ja',
    'name' => 'Japanese',
  ),
),
array (
  'country' => 
  array (
    'code' => 'mx',
    'name' => 'Mexico',
  ),
  'language' => 
  array (
    'code' => 'es',
    'name' => 'Spanish; Castilian',
  ),
),
array (
  'country' => 
  array (
    'code' => 'nl',
    'name' => 'Netherlands',
  ),
  'language' => 
  array (
    'code' => 'nl',
    'name' => 'Dutch',
  ),
),
array (
  'country' => 
  array (
    'code' => 'ng',
    'name' => 'Nigeria',
  ),
  'language' => 
  array (
    'code' => 'en',
    'name' => 'English',
  ),
),
array (
  'country' => 
  array (
    'code' => 'no',
    'name' => 'Norway',
  ),
  'language' => 
  array (
    'code' => 'no',
    'name' => 'Norwegian',
  ),
),
array (
  'country' => 
  array (
    'code' => 'pk',
    'name' => 'Pakistan',
  ),
  'language' => 
  array (
    'code' => 'en',
    'name' => 'English',
  ),
),
array (
  'country' => 
  array (
    'code' => 'ph',
    'name' => 'Philippines',
  ),
  'language' => 
  array (
    'code' => 'en',
    'name' => 'English',
  ),
));

您可能已经注意到,在上面的数组中,印度被提到了两次,现在,我想要的是,如果两个或多个数组包含相同的国家/地区,那么包含相同国家/地区的所有数组都变成一个数组,如下所示:

 $arr = array (array (
  'country' => 
  array (
    'code' => 'in',
    'name' => 'India',
  ),
  'language' => array(
  array (
    'code' => 'en',
    'name' => 'English',
  ),
    array (
    'code' => 'hi',
    'name' => 'Hindi',
  ),
)
)
);

其余数组保持原样。

像这样的事情可能一开始就有效:

<?php
    $Data = array (
        array (
            'country' => array (
                'code' => 'in',
                'name' => 'India'
            ),
            'language' => array (
                'code' => 'en',
                'name' => 'English'
            )
        ),
        array (
            'country' => array (
                'code' => 'in',
                'name' => 'India'
            ),
            'language' => array (
                'code' => 'hi',
                'name' => 'Hindu'
            )
        ),
        array (
            'country' => array (
                'code' => 'id',
                'name' => 'Indonesia'
            ),
            'language' => array (
                'code' => 'id',
                'name' => 'Indonesian'
            )
        ),
        array (
            'country' => array (
                'code' => 'it',
                'name' => 'Italy',
            ),
            'language' => array (
                'code' => 'it',
                'name' => 'Italian'
            )
        ),
        array (
            'country' => array (
                'code' => 'jp',
                'name' => 'Japan'
            ),
            'language' => array (
                'code' => 'ja',
                'name' => 'Japanese'
            )
        ),
        array (
            'country' => array (
                'code' => 'mx',
                'name' => 'Mexico'
            ),
            'language' => array (
                'code' => 'es',
                'name' => 'Spanish; Castilian'
            )
        ),
        array (
            'country' => array (
                'code' => 'nl',
                'name' => 'Netherlands'
            ),
            'language' => array (
                'code' => 'nl',
                'name' => 'Dutch'
            )
        ),
        array (
            'country' => array (
                'code' => 'ng',
                'name' => 'Nigeria'
            ),
            'language' => array (
                'code' => 'en',
                'name' => 'English'
            )
        ),
        array (
            'country' => array (
                'code' => 'no',
                'name' => 'Norway'
            ),
            'language' => array (
                'code' => 'no',
                'name' => 'Norwegian'
            )
        ),
        array (
            'country' => array (
                'code' => 'pk',
                'name' => 'Pakistan'
            ),
            'language' => array (
                'code' => 'en',
                'name' => 'English'
            )
        ),
        array (
            'country' => array (
                'code' => 'ph',
                'name' => 'Philippines'
            ),
            'language' => array (
                'code' => 'en',
                'name' => 'English'
            )
        ),
        array (
            'country' => array (
                'code' => 'nl',
                'name' => 'Netherlands'
            ),
            'language' => array (
                'code' => 'en',
                'name' => 'English'
            )
        )
    );
    function ProcessData ($Data) {
        $Res = array ();
        $m = array ();
        foreach ($Data as $k => $v) {
            $Country = $v ['country'];
            if (in_array ($Country ['name'], $m)) {
                continue;   
            }
            $Lang = array ();
            $Lang [] = $v ['language'];
            for ($i = $k + 1, $l = count ($Data); $i < $l; $i++) {
                if ($Data [$i] ['country'] ['name'] === $Country ['name']) {
                    $Lang [] = $Data [$i] ['language'];   
                }
            }
            $m [] = $Country ['name'];
            $Res [] = array (
                'country' => $v ['country'] ['name'],
                'language' => $Lang
            );
        }
        return $Res;
    }
    print_r (ProcessData ($Data));
?>

给:

Array
(
    [0] => Array
        (
            [country] => India
            [language] => Array
                (
                    [0] => Array
                        (
                            [code] => en
                            [name] => English
                        )
                    [1] => Array
                        (
                            [code] => hi
                            [name] => Hindu
                        )
                )
        )
    [1] => Array
        (
            [country] => Indonesia
            [language] => Array
                (
                    [0] => Array
                        (
                            [code] => id
                            [name] => Indonesian
                        )
                )
        )
    [2] => Array
        (
            [country] => Italy
            [language] => Array
                (
                    [0] => Array
                        (
                            [code] => it
                            [name] => Italian
                        )
                )
        )
    [3] => Array
        (
            [country] => Japan
            [language] => Array
                (
                    [0] => Array
                        (
                            [code] => ja
                            [name] => Japanese
                        )
                )
        )
    [4] => Array
        (
            [country] => Mexico
            [language] => Array
                (
                    [0] => Array
                        (
                            [code] => es
                            [name] => Spanish; Castilian
                        )
                )
        )
    [5] => Array
        (
            [country] => Netherlands
            [language] => Array
                (
                    [0] => Array
                        (
                            [code] => nl
                            [name] => Dutch
                        )
                    [1] => Array
                        (
                            [code] => en
                            [name] => English
                        )
                )
        )
    [6] => Array
        (
            [country] => Nigeria
            [language] => Array
                (
                    [0] => Array
                        (
                            [code] => en
                            [name] => English
                        )
                )
        )
    [7] => Array
        (
            [country] => Norway
            [language] => Array
                (
                    [0] => Array
                        (
                            [code] => no
                            [name] => Norwegian
                        )
                )
        )
    [8] => Array
        (
            [country] => Pakistan
            [language] => Array
                (
                    [0] => Array
                        (
                            [code] => en
                            [name] => English
                        )
                )
        )
    [9] => Array
        (
            [country] => Philippines
            [language] => Array
                (
                    [0] => Array
                        (
                            [code] => en
                            [name] => English
                        )
                )
        )
)

我找到了另一个解决方案,但@anders代码也有效!

$res = array();
foreach($arr as $val)
{
    if(!isset($res[$val['country']['name']]))
   $res[$val['country']['name']] = array('code'=>$val['country']['code'], 'name'=>$val['country']['name'], 'language'=>array());
    $res[$val['country']['name']]['language'][] = array('code'=>$val['language']['code'], 'name'=>$val['language']['name']);
}
echo "<pre>";
print_r(var_export(array_values($res)));
echo "</pre>";

这是工作示例的演示。