2012-02-17 4 views
2

예를 들어 아래에 $ dates1 및 $ dates2이 있고 $ dates1에 모든 날짜를 유지하는 고유 한 $ dates3을 만들고 싶습니다. 중복을 무시하고 $ dates2에 날짜가 있습니다. 배열에는 다른 값이 포함되어 있지만 병합/정렬을 위해 날짜 만 표시하고 있습니다.중복 날짜를 무시하고 날짜순으로 정렬하는 두 개의 날짜 배열을 병합 한 다음 날짜순으로 정렬하는 방법

$ dates1 =

Array 
(
[0] => Array 
    (
     [day] => 2012-01-01 
     [foo] => "bar" 
    ) 

[1] => Array 
    (
     [day] => 2012-01-02 
     [foo] => "bar" 
    ) 

[2] => Array 
    (
     [day] => 2012-01-03 
     [foo] => "bar" 
    ) 
) 

$ dates2 = 그래서

Array 
(
[0] => Array 
    (
     [day] => 2011-12-31 
    ) 

[1] => Array 
    (
     [day] => 2012-01-01 
    ) 

[2] => Array 
    (
     [day] => 2012-01-02 
    ) 
[3] => Array 
    (
     [day] => 2012-01-03 
    ) 
[4] => Array 
    (
     [day] => 2012-01-04 
    ) 
) 

내가 $의 dates3하기 위해, 모든 중복을 무시하고, $의 dates1에 $ dates2를 병합하고 싶습니다 :

Array 
(
[0] => Array 
    (
     [day] => 2011-12-31 
    ) 

[1] => Array 
    (
     [day] => 2012-01-01 
     [foo] => "bar" 
    ) 

[2] => Array 
    (
     [day] => 2012-01-02 
     [foo] => "bar" 
    ) 
[3] => Array 
    (
     [day] => 2012-01-03 
     [foo] => "bar" 
    ) 
[4] => Array 
    (
     [day] => 2012-01-04 
    ) 
) 
+1

힌트 ...'array_multisort()'와'array_unique()'는 여러분의 친구들입니다. – Kenaniah

답변

0

나는 당신을 올바르게 이해하는지 모르겠다. 이런 뜻인가? 이 같은

$old_array = array_merge($dates1, $dates2); 
    $new_array = array(); 
    foreach ($old_array as $item){ 
     if (!array_key_exists($item['day'], $new_array)){ 
      $new_array[$item['day']] = $item; 
     } 
    } 
    return $new_array; 
+0

흠. 프랫의 대답을 시도한 후이 문제를 시도한 결과 동일한 문제 (마지막 요소가 foreach 다음에 누락 된 것으로 보임)가 발생했습니다. 문제가 내 마지막에 있어야합니다 .. 몇 가지 더 시도해 보겠습니다. –

0

뭔가

$a1 = array(array('day' => '2012-01-01', 'foo' => 'bar1'), 
      array('day' => '2012-01-02', 'foo' => 'bar2'), 
      array('day' => '2012-01-03', 'foo' => 'bar3')); 

$a2 = array(array('day' => '2011-12-31'), 
      array('day' => '2012-01-01'), 
      array('day' => '2012-01-02'), 
      array('day' => '2012-01-03'), 
      array('day' => '2012-01-04')); 

$orderedArray = array(); 
foreach (array_merge($a1, $a2) as $v) 
{ 
    if (count($v) == 1 && isset($orderedArray[$v['day']])) 
     continue; 

    $orderedArray[$v['day']] = $v; 
} 
ksort($orderedArray); 

print_r($orderedArray); 

편집을 작동합니다 : 나는 코드를 리팩토링.

+0

이것은 array_merge ($ a1, $ a2)의 마지막 요소를 버리는 것만 제외하면 거의 나를 위해 일하고있다. –

+0

foreach를 끝낸 후에 print_r ($ orderedArray), 마지막 요소 (예에서 -> array ('day'=> '2012-01-04')), 누락되었습니다. 그러나 다른 답변 (저그 링)에서도 이러한 현상이 발생했음을 알았습니다. 문제가 될 수도 있습니다. 좀 더 많은 것을 시도 할 것입니다 .. –

+0

array_merge ($ a1, $ a2)의 출력을 보여줄 수 있습니까? – mpratt

관련 문제