2010-05-20 124 views
0

說,我有個如何兩個相同長度的陣列有兩個字段合併到一個數組(不追加/合併)

$months = array('Jan', 'Feb', 'Mar'...'Dec'); 

,還有一個是數組,天(比方說,對於2010年)

$mdays = array(31, 28, 31...31); 

我要合併/結合這兩個陣列,成這樣的陣列:

$monthdetails[0] = ('month' => 'Jan', 'days' => 31) 

$monthdetails[1] = ('month' => 'Feb', 'days' => 28) 

... 

$monthdetails[11] = ('month' => 'Dec', 'days' => 31) 

我可以通過陣列和f二者環生病$monthdetails。我想知道是否有任何功能/更簡單的方法來實現相同的結果。

謝謝! 拉吉

回答

1

array_combine

$monthdetails = array_combine($months, $mdays); 


echo $monthdetails['Jan']; //31 

這不正是你要找的東西,但你應該調整你的系統中使用這種方法。

+0

我不能使用這個,因爲打印鍵名並不容易。另外,我可能必須在我的應用程序中合併超過2個數組。 foreach/for循環方法是唯一的選擇。 感謝您的提示。 – Raj 2010-05-22 21:28:55

3

鑑於這兩個數組的順序是一樣的:

foreach ($months as $key => $value) { 
    $monthdetails[$key] = array('month' => $value, 'days' => $mdays[$key]); 
}
0

如果你可以用一個陣列結構這樣的生活:

Array 
(
    [Jan] => 31 
    [Feb] => 28 
    [Mar] => 31 
    ... 
    [Dec] => 31 
) 

然後array_combine()是你的朋友:

$monthdetails = array_combine($months, $mdays); 

它可能是最快的方式...

1

假設兩個數組的大小相同:

$count = count($months); 
$monthdetails = array(); 
for ($i=0; $i<$count; $i++) { 
    $monthdetails[] = array('month' => $months[$i], 'days' => $mdays[$i]); 
} 

編輯:像其他的答案,array_combine()立刻浮現在腦海,但它不會做什麼提出這樣的問題。

編輯2:我仍然建議不要使用這種直接的方法,因爲它沒有處理閏年的可能性。重新發明日期時間輪通常不是一個好主意。

+0

月份日的情況是一個例子來說明我的要求,而不是實際的要求。我不重新發明在PHP中的好日期系統:-) 感謝您的提示。 – Raj 2010-05-22 21:27:23

0
function month_callback($month, $day){ 
    return array('month' => $month, 
        'day' => $day); 
} 

$months = array('Jan', 'Feb', 'Mar'); 
$days = array(31, 28, 31); 

$monthdetails = array_map('month_callback', $months, $days); 

print_r($monthdetails); 
相關問題