2014-12-04 4 views
0

날짜, 법원 번호, 구성원 및 유형이 포함 된 5 개의 법원에서 특정 날짜와 시간에 대한 법원 예약 배열 2 개를 보유하고 있습니다. 첫 번째 배열에 일치하는 날짜/법원이있는 두 번째 배열에서 항목을 제거하고 싶습니다.두 값을 기반으로 다차원 배열 요소를 제거하십시오.

여기 하나의 타임 슬롯이 있습니다. 첫 번째 배열은이 타임 슬롯에서 2 회의 예약을 보여줍니다.

Array 
(
[0] => Array 
    (
     [0] => Jul 6, 2014 7:00 AM 
     [1] => 1 
     [2] => Annie 
     [3] => Regular 
    ) 

[1] => Array 
    (
     [0] => Jul 6, 2014 7:00 AM 
     [1] => 3 
     [2] => Meredith 
     [3] => Regular 
    ) 
)   

두 번째 배열은 해당 날짜/시간에 사용 가능한 모든 시간 슬롯입니다.

Array 
(
[2] => Array 
    (
     [0] => Jul 6, 2014 7:00 AM 
     [1] => 1 
     [2] => 
     [3] => UNBOOKED 
    ) 

[3] => Array 
    (
     [0] => Jul 6, 2014 7:00 AM 
     [1] => 2 
     [2] => 
     [3] => UNBOOKED 
    ) 

[4] => Array 
    (
     [0] => Jul 6, 2014 7:00 AM 
     [1] => 3 
     [2] => 
     [3] => UNBOOKED 
    ) 

[5] => Array 
    (
     [0] => Jul 6, 2014 7:00 AM 
     [1] => 4 
     [2] => 
     [3] => UNBOOKED 
    ) 

[6] => Array 
    (
     [0] => Jul 6, 2014 7:00 AM 
     [1] => 5 
     [2] => 
     [3] => UNBOOKED 
    ) 

) 

내가 원하는 것은 요소 [0]과 [1]에 일치하는 항목을 두 번째 배열에서 제거하는 것입니다. 필자가 시도한 모든 솔루션은 다른 배열이 아닌 문자열에 대한 배열을 검색합니다. 결과는 이상하게 보입니다 (외부 숫자 키는 중요하지 않습니다).

Array 
(
    [0] => Array 
     (
      [0] => Jul 6, 2014 7:00 AM 
      [1] => 1 
      [2] => Annie 
      [3] => Regular 
     ) 

    [1] => Array 
     (
      [0] => Jul 6, 2014 7:00 AM 
      [1] => 3 
      [2] => Meredith 
      [3] => Regular 
     ) 

    [3] => Array 
     (
      [0] => Jul 6, 2014 7:00 AM 
      [1] => 2 
      [2] => 
      [3] => UNBOOKED 
     ) 

    [5] => Array 
     (
      [0] => Jul 6, 2014 7:00 AM 
      [1] => 4 
      [2] => 
      [3] => UNBOOKED 
     ) 

    [6] => Array 
     (
      [0] => Jul 6, 2014 7:00 AM 
      [1] => 5 
      [2] => 
      [3] => UNBOOKED 
     ) 
) 
+1

callback 매개 변수와 함께 array_filter를 사용하여 특정 요소를 제거하는 함수를 작성할 수 있습니다. –

답변

0

배열 필터를 사용하여 예약 된 시간 목록에있는 사용 가능한 시간 목록의 항목을 제거하는 방법입니다.

현재 작업에서 볼 수 있습니다 http://codepad.viper-7.com/VVbnys

$regular = Array(
      0 => Array (
        0 => 'Jul 6, 2014 7:00 AM', 
        1 => 1, 
        2 => 'Annie', 
        3 => 'Regular', 
       ), 
      1 => Array (
        0 => 'Jul 6, 2014 7:00 AM', 
        1 => 3, 
        2 => 'Meredith', 
        3 => 'Regular', 
       ) 
      ); 

$unbooked = Array (
      2 => Array 
       (
        0 => 'Jul 6, 2014 7:00 AM', 
        1 => 1, 
        2 => '', 
        3 => 'UNBOOKED', 
       ), 
      3 => Array 
       (
        0 => 'Jul 6, 2014 7:00 AM', 
        1 => 2, 
        2 => '', 
        3 => 'UNBOOKED', 
       ), 
      4 => Array 
       (
        0 => 'Jul 6, 2014 7:00 AM', 
        1 => 3, 
        2 => '', 
        3 => 'UNBOOKED', 
       ), 
      5 => Array 
       (
        0 => 'Jul 6, 2014 7:00 AM', 
        1 => 4, 
        2 => '', 
        3 => 'UNBOOKED', 
       ), 
      6 => Array 
       (
        0 => 'Jul 6, 2014 7:00 AM', 
        1 => 5, 
        2 => '', 
        3 => 'UNBOOKED', 
       ), 
      ); 

//filter the unbooked array 
$unbooked = array_filter($unbooked, function($availSlot) use ($regular){ 
    //loop over each taken slot 
    foreach($regular as $takenSlot){ 
     //if keys 0 and 1 are the same in both taken and available... 
     if($availSlot[0] == $takenSlot[0] && $availSlot[1] == $takenSlot[1]){ 
      //return false to remove this element from the array 
      return false; 
     } 
    } 
    //if we get here, no matches were found. 
    //return true so the element stays in the array 
    return true; 
}); 

을 이상적으로하지만, 형식은 루프없이 사용할 수있는 슬롯과 숫자 아래 둥지 물건을 할 수있는 다차원 배열로 변경됩니다 일치하는 것을 찾는 모든 항목에 대해

+0

Jonathan은 매우 잘 작동합니다. 도움을 감사하십시오. – jimlongo

관련 문제