php - 使用 PHP 检查并删除多维数组中的数组值

标签 php mysql for-loop multidimensional-array

我设计了一个预订房间的系统,并以多维数组的形式存储数据。 现在我想编写一个函数来查找在时间和日期(从、到、日期)上重复的数组值。

逻辑是一间房间可以在一天内预订一次或多次,但不能在同一时间段内被一个或多个用户预订。例如,John 在 15/08/2014 预订了 1300-1500,这样就没有人可以再在此期间预订。

虽然我可以理解逻辑,但我不知道如何实现在检查时删除这些值的功能。

这是数组(数据):

    $recordBooking = array(
            "112"=>array(
                "date"=>array(
                    "24/09/2014"=>array(
                        array(
                            "from"=>1,
                            "to"=>3,
                            "username"=>"Amy"
                                ),
                        array(   //duplicate data 
                            "from"=>2,
                            "to"=>5,
                            "username"=>"John"
                                )   
                        ),
                    "27/09/2014"=>array(
                        array(
                            "from"=>1,
                            "to"=>3,
                            "username"=>"Chars"
                                )
                        ),
                    "29/09/2014"=>array(
                        array(
                            "from"=>1,
                            "to"=>5,
                            "username"=>"Peter"
                                )
                        ),
                    "30/09/2014"=>array(
                        array(
                            "from"=>3,
                            "to"=>6,
                            "username"=>"Amy"
                                )
                        )
                    )
                )
        );

我想设置警报消息并删除当函数检测到重复数据时重复的值。感谢您的帮助。

最佳答案

对于数组过滤,有一个 array_filter发明了函数。假设您已经在迭代日期:

$booked = []; // holder for already booked
$result = array_filter(
  $recordBooking['112']['date']['24/09/2014'], // array value when iterating dates
  function($rb) use (&$booked) { // will filter this date

    foreach($booked as $b) {
      if(
        ($b['from'] < +$rb['from'] && $b['to'] > +$rb['from']) ||
        ($b['from'] < +$rb['to'] && $b['to'] > +$rb['to'])
      ) { // already booked!!!
        echo "ALERT. Skipped: ${rb['username']}\n";
        return false;
      }
    }
    $booked[] = ['from' => +$rb['from'], 'to' => +$rb['to'] ]; // mark time as booked
    return true;
  }
);

var_dump($result); 

// ⇒
/*
ALERT. Skipped: John
array(1) {
  [0]=>
  array(3) {
    ["from"]=>
    int(1)
    ["to"]=>
    int(3)
    ["username"]=>
    string(3) "Amy"
  }
}
*/

希望有帮助。

关于php - 使用 PHP 检查并删除多维数组中的数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27055369/

相关文章:

mysql - 如果 3 个字段匹配,则插入或更新 MySQL 数据库

Java 迭代器与 for 循环

javascript - PHP 中的用户时区问题修复

php - 我需要知道预定义的点是在海中还是在陆地上

mysql - 查询 : Join, Concat,但得到结果

php - 安卓 : Upload Image to mysql

python - 我们是否应该始终用列表理解替换 for 循环

c - 在 C 中显示奇数次数字

php - 在 MySql 中加入 DELETE?如何?

php - 警告: odbc_fetch_row(): 4 is not a valid ODBC result错误