2013-02-22 4 views
-1

См. Следующие массивы. Я хочу скрыть 6 и 7 в массиве while, так как они были в первом массиве, в основном его время. Массив Frst содержит встречи, второй массив содержит тайминги. Я хочу опустить синхронизацию (второй массив), если пользователь уже зафиксировал где-то в это время. Таким образом, в основном время Comparision с StrToTime integer..Need вашей помощи ....сравнить два массива и удалить - PHP ARRAY

Array 
(
    [3] => Array 
     (
      [id] => 100 
      [start] => 1364558400 
      [end] => 1364565600 
      [starttime] => 2013-03-29 17:30:00 
      [endtime] => 2013-03-29 19:30:00 
     ) 

    [4] => Array 
     (
      [id] => 100 
      [start] => 1364542200 
      [end] => 1364549400 
      [starttime] => 2013-03-29 13:00:00 
      [endtime] => 2013-03-29 15:00:00 
     ) 

) 
Array 
(
    [6] => Array 
     (
      [id] => 37 
      [start] => 1364542200 
      [end] => 1364549400 
      [starttime] => 2013-03-29 13:00:00 
      [endtime] => 2013-03-29 15:00:00 
     ) 

    [7] => Array 
     (
      [id] => 38 
      [start] => 1364549400 
      [end] => 1364556600 
      [starttime] => 2013-03-29 15:00:00 
      [endtime] => 2013-03-29 17:00:00 
     ) 

    [8] => Array 
     (
      [id] => 39 
      [start] => 1364558400 
      [end] => 1364565600 
      [starttime] => 2013-03-29 17:30:00 
      [endtime] => 2013-03-29 19:30:00 
     ) 

    [9] => Array 
     (
      [id] => 40 
      [start] => 1364565600 
      [end] => 1364571000 
      [starttime] => 2013-03-29 19:30:00 
      [endtime] => 2013-03-29 21:00:00 
     ) 

) 
+0

ваш вопрос как-то не ясно – 2013-02-22 19:38:23

+0

пользователя 100 назначен на [время_запуска] => 2013-03-29 17:30:00 [время окончания] = > 2013-03-29 19:30:00 и [время начала] => 2013-03-29 13:00:00 [endtime] => 2013-03-29 15:00:00 ... вот какой массив 1 показывает ... У меня есть 2-й массив, чтобы показать предопределенные тайминги и хочу сравнить 1-й массив и пропустить 6,7, так как пользователь уже назначил в то время ... – user1854007

ответ

1

Насколько я понял вашу проблему, вы должны UNSET элементов второго массива. Давайте предположим, что ваши массивы являются:

$appointments = array(...); 
$timings = array(...); 

Вы должны сделать

if (condition_is_met($appointments)) { 
    unset($timings[$id]); 
} 

Это то, что вам нужно?

редактировать: Я предполагаю, что вы ищете что-то вроде этого:

foreach($timings as $timing) { // check if this timing is already busy 
    $id = null; 
    foreach ($appointments as $id => $appointment) { 
    if ($appointment['start'] == $timing['start'] && 
     $appointment['end'] == $timing['end']) { 
     $found = $id; 
     break; 
    } 
    } 
    if ($id) unset($appointments[$id]); 
} 

Это зависит от того, что является условием решения раз - оба должны начинаться и заканчиваться быть одинаковым в обоих элементах, или просто по крайней мере, на одну секунду от того же периода. Вы можете изменить оператор if и поместить туда все, что захотите.

+0

Я думаю, что это сделает трюк ... но небольшая коррекция возможна проверить время между точками, а не точным временем? – user1854007

+0

да, возможно. Просто измените == на <= and > = и это будет оно. – ducin

+0

идеальный приятель ... но я все еще работаю в <= and > = часть ... надеюсь, что закончен, как только возможно ... день учебы ... спасибо дорогой друг ... – user1854007

0

Как я понимаю, вы пытаетесь удалить элементы во втором массиве, если они появляются в первом массиве. См.:

foreach($array2 as $i) 
{ 
    if (in_array($i, $array1)) 
    { 
    unset($i); 
    } 
} 

Реф. http://php.net/manual/en/function.in-array.php

Или вы могли бы создать такую ​​функцию:

function checkItemExists($arr1, $arr2) 
{ 
    $index1 = 0; 
    $index2 = 0; 
    foreach ($arr1 as $i) 
    { 
    foreach ($i as $j) 
    { 
     if ($j == $arr2[$index1][$index2]) 
     { 
     unset($arr2[$index1][$index2]); 
     } 
    index2++; 
    } 
    $index1++; 
    $index2 = 0; 
    } 
} 
Смежные вопросы