2016-03-05 93 views
-6

这里的例子数组:重新创建一个数组,这样我得到的结果,因为我想

$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', 
), 
) 
) 
); 

和阵列的其余部分保持原样。

+0

你举的例子的情况是非常大的;你能提供一个你想要做的最简单的例子吗? – Vulcan

+0

我投票结束这个问题作为题外话,因为SO不是众包代码生成器。 –

+0

@ harry123我不能为别人说话,但我低估了你的问题,因为stackoverflow不是代码编写服务。 – Sculper

回答

0

像这样的东西可能一开始工作:

<?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 
         ) 

       ) 

     ) 

) 
+0

谢谢!当我第一次尝试你的代码时,它不起作用,但现在当我重试时,我发现它确实有效,也许我做错了什么。再次感谢! – harry123

+0

乐意帮忙:) – Anders

0

我发现多了一个解决方案,但是@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>"; 

Here is a demo of working example.

相关问题