2014-03-04 40 views
3

創建日期陣列我有一個數組一樣,從二維數組中的PHP

$my_array=array(array('month'=> 3, 
         'day'=> 4, 
         'hour' => 1, 
         'minut' => 15, 
         'year'=> 2014), 
        array('month'=> 5, 
         'day'=> 7, 
         'hour' => 1, 
         'minut' => 50, 
         'year'=> 2012) 
         ---------- 
         ); 

我想從這個數組一樣創建一個新的數組,

$new_array=array('2014-3-4 1:15','2012-5-7 1:50'); 

我知道這是可能的用循環遍歷每個元素,有沒有簡單的方法?因爲我的數組包含大量數據(多於50000個)。

回答

2

使用array_map嘗試是這樣的:

$newArr = array_map(function($d) { 
    return $d['year'] . '-' . $d['month'] . '-' . $d['day'] . ' ' . $d['hour'] . ':' . $d['minut']; 
}, $my_array); 
1

OFC其可能:

foreach($my_array as $k => $v) { 
    $new_array[i] = $v["year"]."-".$v["month"]."-".$v["day"]." ".$v["hour"].$v["minut"]; 
    i++; 
} 

//未經測試

+1

我知道這個方法。但是我的數組太大了,它會在foreach之前超時 – Shin

+0

http://de1.php.net/set_time_limit應該這樣做。不要忘記給用戶反饋,該腳本仍在工作。 –

1

您可以使用array_map(),但是,請注意:這將內部使用循環

$result = array_map(function($x) 
{ 
    return $x['year'].'-' 
     .$x['month'].'-' 
     .$x['day'].' ' 
     .$x['hour'].':' 
     .$x['minut']; 
}, $my_array); 

因此,這不會增加整體性能。它也不會檢查你的日期。我建議使用mktime()date(),這樣你就可以得到任何日期格式。或者可以使用checkdate()如果你需要檢查是否元素包含有效日期(順便說一句,很好的替代那些功能是DateTime API)

關於普通級聯唯一的好東西是會快一點點(因爲在使用日期函數的情況下,顯然會有開銷)。