2014-12-04 2 views
0

У меня в моем примере 2 массива судебных заказов на конкретную дату и время на 5 судах с указанием даты, номера суда, члена и типа. Я хочу удалить элементы из второго массива, где в первом массиве есть совпадающая дата/суд.удалить элементы в многомерном массиве на основе двух значений

Вот один временной интервал. Первый массив показывает 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

Вы хотите использовать 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

Спасибо Джонатан, который работал очень хорошо. Цените помощь. – jimlongo

Смежные вопросы