请看下面的数组,我想在循环中隐藏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
)
)
答案 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;
}
}