-1

次の配列を参照してください。6 と 7 を配列の while ループで非表示にしたいのは、それらが最初の配列にあったためです。基本的にそのタイミングです。最初の配列には予定が含まれ、2 番目の配列にはタイミングが含まれます。ユーザーがその時点ですでにどこかを修正している場合は、タイミング (2 番目の配列) を省略します。したがって、基本的に strtotime integer との時間比較..あなたの助けが必要です....

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
        )

)
4

2 に答える 2

1

私があなたの問題を理解している限り、2番目の配列の要素を設定解除する必要があります。配列が次のとおりであると仮定しましょう。

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

それは、時間を扱う条件が何であるかによって異なります - 開始と終了の両方が両方の要素で同じであるか、同じ期間から少なくとも 1 秒ある必要があります。if ステートメントを変更して、必要なものをそこに置くことができます。

于 2013-02-22T19:39:45.127 に答える
0

私が理解しているように、最初の配列に表示される場合、2 番目の配列の要素を削除しようとしています。参照してください:

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;
  }
}
于 2013-02-22T19:41:41.710 に答える