2017-06-02 51 views
0

所以我得到了一個一維數組,如:PHP中使用一個數組作爲多維數組的子數組鍵

Array 
(
[0] => md5 
[1] => name 
[2] => description 
[3] => url 
) 

和一個多維數組:

Array 
(
    [0] => Array 
     (
      [0] => md5#1 
      [1] => name1 
      [2] => desc1 
      [3] => url1 
     ) 
    [1] => Array 
     (
      [0] => md5#2 
      [1] => name2 
      [2] => desc2 
      [3] => url2 
     ) 
) 

,我想先用的值陣列作爲多維一個子陣列的密鑰,所以輸出應爲:

Array 
    (
     [0] => Array 
      (
       [md5] => md5#1 
       [name] => name1 
       [desription] => desc1 
       [url] => url1 
      ) 
     [1] => Array 
      (
       [md5] => md5#2 
       [name] => name2 
       [description] => desc2 
       [url] => url2 
      ) 
    ) 

或者(作爲一個偏離主題的問題),如果他們的子數組的鍵不是[md5]而是[0],我怎麼能通過md5的值來排列多維數組的元素?

在此先感謝!

+0

如果你確定按照這兩個數組中的元素的順序 - array_combine'。排序是用'usort'完成的。 –

+0

但是,我該如何做到這一點?如果我嘗試'array_combine($ keysarray,$ multiDarray)'我得到'array_combine():這兩個參數應該有相同數量的元素,因爲我認爲它試圖爲[0] =>數組設置鍵,並且不是爲了它的元素。 – sh00t

+0

這就是爲什麼有foreach循環看到他的答案。它通過第一級的每個項目並將其應用於其值。 –

回答

0

兩個數組,其中一個的值是鍵,其他都值值值相結合,使用array_combine功能:

$keysArray = []; 
$multiArray = []; 
$result_array = []; 
foreach ($multiArray as $value) { 
    $result_array[] = array_combine($keysArray, $value); 
} 

對於排序 - 使用usort和定義自定義功能:

usort($result_array, function($a, $b) { return strcmp($a['md5'], $b['md5']); }); 
+0

該死的,我有第一陣列中有1個額外的元素,我不知道,並且這個錯誤來自^^ 非常感謝! – sh00t

+0

btw我如何將'$ result_array'的值保存在foreach之外?可能應該放'&'但是在哪裏?否則'$ result_array'只有一個元素,如果在foreach外面打印 – sh00t

+0

再次檢查您的代碼。你不忘記'[]'? –