2016-12-15 75 views
2

我正在努力使用PHP中的數據結構。我試圖使用array_merge_recursive來通過類似鍵來壓縮數組,然後獲取所有值而不是覆蓋它們。這就是爲什麼我選擇array_merge_recursive而不是array_merge帶有一個數組的PHP array_merge_recursive

我的陣列是類似於:

Array 
(
    [0] => Array 
    (
    [App] => APP1 
    [Type] => DB 
) 
    [1] => Array 
    (
    [App] => APP1 
    [Type] => WEBSITE 
) 
    [2] => Array 
    (
    [App] => APP2 
    [Type] => IOS 
) 
) 

我期待array_merge_recursive像鍵,然後組組合等元素融入數組但這不是我看到的行爲。

我希望能得到一個數組類似如下:

Array 
(
    [0] => Array 
    (
    [App] => APP1 
    [Type] => Array 
    (
     [0] => DB 
     [1] => WEBSITE 
    ) 
) 
    [1] => Array 
    (
    [App] => APP2 
    [Type] => IOS 
) 
) 
+0

'不是我所看到的行爲'在結果中,您將'鍵'從鍵'鍵入'移動到鍵'0'的子數組。 「WEBSITE」一樣。你怎麼''array_merge_recursive'工作?並嘗試解釋你的預期結果背後的邏輯。否則無人可以提供幫助。 – JustOnUnderMillions

+0

我的印象是'array_merge_recursive'可以用於一個數組。我錯誤地假設了。我只是試圖將「APP」鍵組合在一起,並保留分配給「TYPE」鍵的值。 – sconicelli

回答

1

array_merge_recursive()沒有做什麼,你認爲它。您正在尋找一個函數,根據對您有幫助的特定規則重新構造數組,因此沒有內置php函數。即PHP如何知道你想要新的陣列由APP而不是TYPE構成。假設你的數組始終是簡單的,你想要的功能的最簡單的版本看起來是這樣的:

function sortByApp($array){ 
    $result = array(); 
    foreach($array as $row){ 
     if(!isset($result[ $row['APP'] ]) { 
      $result[ $row['APP'] ] = array(
       'APP' => $row['APP'], 
       'TYPE' => array($row['TYPE']) 
      ); 
     }else{ 
      $result[ $row['APP'] ]['TYPE'] = array_merge($result[ $row['APP'] ]['TYPE'], array($row['TYPE'])); 
     } 
    } 
    $result = array_values($result); //All this does is remove the keys from the top array, it isn't really necessary but will make the output more closely match what you posted. 

    return $result 

} 

注意,在該方案中,TYPE關鍵在每一個APP值將始終是一個數組。這使得我後來處理數據變得更容易,因爲您不必擔心檢查字符串與數組。