2013-05-14 48 views
0

這是我的數組。在同一陣列內移動具有相同值的數組

Array 
(
    [id] => 1 
    [color] => "White" 
    [something] => Array 
    (
     [country] => "France" 
     [city] => "Paris" 
    ) 

) 
Array 
(
    [id] => 2 
    [color] => "Black" 
    [something] => Array 
    (
     [country] => "Germany" 
     [city] => "Berlin" 
    ) 

) 
Array 
(
    [id] => 2 
    [color] => "Red" 
    [something] => Array 
    (
     [country] => "Russia" 
     [city] => "Moscow" 
    ) 

) 

我想將具有相同id值的數組分組。這應該是輸出:

[0] => Array 
(
    [0] => Array 
    (
     [id] => 1 
     [color] => "White" 
     [something] => Array 
     (
       [country] => "France" 
       [city] => "Paris" 
     ) 

    ) 

) 
[1] => Array 
(

    [0] => Array 
    (
     [id] => 2 
     [color] => "Black" 
     [something] => Array 
     (
      [country] => "Germany" 
      [city] => "Berlin" 
     ) 

    ) 
    [1] => Array 
    (

     [id] => 2 
     [color] => "Red" 
     [something] => Array 
     (
      [country] => "Russia" 
      [city] => "Moscow" 
     ) 

    ) 

) 

我試圖用幾十foreach聲明,但沒有辦法,我讓同一陣列內具有相同id陣列。這可能與它是一個多維數組有關嗎?我應該用兩個嵌套的foreach來得到結果嗎?

回答

1

代碼:

<?php 

$arr = array(
    array(
     'id' => 1, 
     'color' => 'white', 
     'something' => array(
      'country' => 'France', 
      'city' => 'Paris', 
     ), 
    ), 
    array(
     'id' => 2, 
     'color' => 'Black', 
     'something' => array(
      'country' => 'Germany', 
      'city' => 'Berlin', 
     ), 
    ), 
    array(
     'id' => 2, 
     'color' => 'Red', 
     'something' => array(
      'country' => 'Russia', 
      'city' => 'Moscow', 
     ), 
    ), 
); 


function groupify($arr) { 
    $new = array(); 
    foreach ($arr as $item) { 
     if (!isset($new[$item['id']])) { 
      $new[$item['id']] = array(); 
     } 
     $new[$item['id']][] = $item; 
    } 
    return $new; 
} 

print_r(groupify($arr)); 

結果:

Array 
(
    [1] => Array 
     (
      [0] => Array 
       (
        [id] => 1 
        [color] => white 
        [something] => Array 
         (
          [country] => France 
          [city] => Paris 
         ) 

       ) 

     ) 

    [2] => Array 
     (
      [0] => Array 
       (
        [id] => 2 
        [color] => Black 
        [something] => Array 
         (
          [country] => Germany 
          [city] => Berlin 
         ) 

       ) 

      [1] => Array 
       (
        [id] => 2 
        [color] => Red 
        [something] => Array 
         (
          [country] => Russia 
          [city] => Moscow 
         ) 

       ) 

     ) 

) 

,如果你不希望保留鍵,就return之前調用array_values

+0

基本上我試着用數十個類似的功能沒有成功。感謝您的「結果」例子,我明白問題所在。我沒有在Array()中傳遞結果。我總是傳遞3個獨立的數組Array(1)Array(2)Array(3)而不是Array(Array(1)Array(2)Array(3))。謝謝CertaiN。 – user1274113 2013-05-15 08:47:41

1

使用id作爲新數組的密鑰。

$a[$array[id]][] = $array;

0

如果你想使用foreach:

<?php 
$return = array(); 
foreach($array as $key => $innerArray) { 
    $return[$innerArray['id']][]= $innerArray; 
} 

現在$返回包含它們的ID,其中鍵1和2是你的ID摸索

array(
    1 => array(
     array(/** **/) 
    ), 
    2 => array(
     array(/** **/), 
     array(/** **/) 
    ); 
); 

你可以然後像這樣訪問你的組:

foreach($return as $key => $groupArray) { 
    // you have the groups here 

    foreach($groupArray as $id => $singleArray) { 
     // singleArray contains your id, colour etc 
    } 
} 

foreach($return[1] as $groupOne) { 
    // all arrays with id = 1 
} 
+0

是的,我使用的是相同的方法,但我得到的是很多有問題的數組(有一些奇怪的邏輯),但最重要的是所有具有相同ID的元素總是保留在它們自己的數組中。基本上[0] =>(mess),[1] =>(mess),[2] =(mess)。我仍然有3把鑰匙。 – user1274113 2013-05-14 15:47:00

+0

對不起。我知道了。你的代碼正在工作,但這不是我想要的。可悲的是我做了一個錯誤發佈我的「我想要這個輸出」的一部分。 – user1274113 2013-05-14 16:06:18

相關問題