2014-03-04 2 views
3

두 차원 배열에서이 가능합니다 나도 알아, 내가 좋아하는이 배열에서 새 배열을 만들려면, 내가 같은 배열을 PHP

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

$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) 
         ---------- 
         ); 

을 날짜 배열을 생성 루프와 각 요소를 통과, 쉬운 방법이 있습니까? 내 배열() 큰 숫자가 포함되어 있기 때문에. , 참고하시기 바랍니다

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

// 테스트되지 않은

답변

2

array_map를 사용하여이 같은 시도이 을 것이다 루프을 내부적으로 사용하십시오.

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

따라서 전체 성능이 향상되지는 않습니다. 또한 날짜를 확인하지 않습니다. mktime()date()을 사용하는 것이 좋으므로 날짜 형식이 될 수 있습니다. 아니면 요소가 유효한 날짜가 포함되어 있는지 확인해야합니다 경우 checkdate()을 사용할 수 있습니다 (

일반 연결에 대한 유일한 좋은 일이 조금 빠른 것입니다 (BTW, 그 기능에 대한 좋은 대안이 DateTime API입니다) 날짜 함수를 사용하는 경우 오버 헤드가 발생하기 때문입니다.

1

을 :

+1

이 방법을 알고 있습니다.하지만 내 배열이 너무 큽니다. foreach 전에 시간 초과가 발생합니다 – Shin

+0

http://de1.php.net/set_time_limit해야합니다. 스크립트가 여전히 작동하고 있다는 사용자 피드백을 잊지 마십시오. –

1

당신은 array_map()를 사용할 수 있지만 : 그것의 가능한 OFC

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