比较两个数组并删除 - PHP ARRAY

时间:2013-02-22 19:35:33

标签: php arrays

请看下面的数组,我想在循环中隐藏6和7,因为那些是在第一个数组中,基本上是它的时间。第一个数组包含约会,第二个数组包含时序。如果用户已在某个时间某处修复过,我想省略计时(第二个数组)。所以基本上时间比较strtotime整数..需要你的帮助......

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
        )

)

2 个答案:

答案 0 :(得分:1)

据我了解你的问题,你应该取消设置第二个数组的元素。我们假设你的数组是:

$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语句并将其放在任何您想要的位置。

答案 1 :(得分: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;
  }
}