【发布时间】:2016-06-01 16:52:56
【问题描述】:
更新:收到回复后,我意识到我应该尝试使用数据库查询来解决这个问题,所以我写了a more detailed post here
原帖: 我想比较两个多维数组并去掉符合某个条件的元素。我知道我必须用一些键遍历数组然后取消设置,但我似乎无法正确执行。
这两个数组是$all,它存储了所有可用的房间和他们的床,$reserved,它只存储了保留的房间和保留的床。
我想遍历所有预订并获取位置 $reservations[x][0] 上的房间标题,其中 x 是当前查看的预订,并将其与 $all[a][0] 中的所有元素进行比较,其中 a 是当前查看的房间。
因此,当我发现 $all[0][0] => 'Luxury Room' 与 $reservations[0][0] => 'Luxury Room' 匹配时,我将查看床和位置 y 上的床代码,其中 y 是当前查看的床位代码$reservations[x][1][y] 并将其与匹配房间的所有可用床位进行比较,因此与$all[0][1][b] 比较,其中b 是所有可用房间。
当我发现$all[0][1][1]=>'xx2' 的值与$reservations[0][1][0]=>'xx2' 中的值匹配时,我将从$all 中取消设置索引01
所以最后,当我将遍历 $all 数组并将每个元素的索引 [0] 作为标题和索引 1 上的数组元素作为床时,我只会得到床 'xx2' 可用于'豪华房'
//$all is an array where index 0 is an array
$all = array( 0=>array(
//index 0 has value 'Luxury Room' (room title)
0=>'Luxury Room',
//index 1 is an array
1=>array(
//where index 0 has value 'xx1' (bed code)
0=>'xx1',
//where index 1 has value 'xx2' (bed code)
1=>'xx2')),
//again index 1 is an array etc. just as above...
1=>array(
0=>'Cheap Room',
1=>array(
0=>'zz1',
1=>'zz2',
2=>'zz3',
3=>'zz4')));
$reserved = array( 0=>array(
0=>'Luxury Room',
1=>array(0=>'xx2')));
【问题讨论】:
-
有没有办法通过适当的数据库查询而不是处理这个怪物?只是好奇。
-
可能有,但我没有深入了解这个想法。基本上,我有一个带有 ID 的桌子房间,而 BEDS 与床的总数一致。所以我想通过一个循环将它转换成那个简单的数组,因为最后我需要的是可用的房间 ID 及其可用的床。第二张表是预订,它有 FROM(日期),TO(日期),ROOMS_ID( int) 和 BED_NUMBER (int)
-
但我不知道如何编写一个查询来获取可用房间。将它们与每个房间及其床位的预订日期范围进行比较,然后返回一个表,其中每个字段中只有 ROOMS_ID 和床位号..
-
对于异构项目,您应该使用关联数组而不是数值数组。
-
您应该重新提出您的问题并改为使用 SQL。类似于“我如何通过 SQL 做到这一点?”并向我们展示您的表结构和所需的输出。以任何方式、形状或形式处理这样的数组都没有效率。
标签: php arrays multidimensional-array