我正在从事旅游网站项目,我想比较两个数组,但是当我尝试在数组中添加新内容时,过滤停止了。我想过滤一下,如果两个房间相等,然后检查其计划并显示具有最低房价和其他剩余结果的房间。我为它写了下面的代码
$arr1 = array(
array (
'ratePlanCode' => '1',
'roomId' => '10',
'whotel' =>'0',
'roomName' => 'Standard',
'ratePlan' => 'CPAI',
'roomRate' => 11000
),
array
(
'ratePlanCode' => '2',
'roomId' => '10',
'whotel' =>'0',
'roomName' => 'test',
'ratePlan' => 'MAP',
'roomRate' => 10000
),
array
(
'ratePlanCode' => '3',
'roomId' => '10',
'whotel' =>'0',
'roomName' => 'test123',
'ratePlan' => 'CP',
'roomRate' => 10000
),
array
(
'ratePlanCode' => '4',
'roomId' => '10',
'whotel' =>'0',
'roomName' => 'test',
'ratePlan' => 'MAP',
'roomRate' => 10000
)
);
$arr2 = array(
array (
'ratePlanCode' => '10',
'roomId' => '10',
'whotel' =>'1',
'roomName' => 'Standard',
'ratePlan' => 'CPAI',
'roomRate' => 12000
),
array
(
'ratePlanCode' => '100',
'roomId' => '10',
'whotel' =>'1',
'roomName' => 'Honeymoon',
'ratePlan' => 'MAP',
'roomRate' => 10800
),
array
(
'ratePlanCode' => '102',
'roomId' => '10',
'whotel' =>'1',
'roomName' => 'test123',
'ratePlan' => 'CP',
'roomRate' => 9000
),
array
(
'ratePlanCode' => '101',
'roomId' => '10',
'whotel' =>'1',
'roomName' => 'waff',
'ratePlan' => 'MAP',
'roomRate' => 10800
));
//print_r($hotelArray);
$data123 = array_merge($arr1,$arr2);
//print_r($data);
$output = array();
foreach($data123 as $arr){
$output [$arr['roomName']][$arr['ratePlan']][$arr['ratePlanCode']][$arr['roomId']][] =$arr['roomRate'] ;
sort($output[$arr['roomName']][$arr['ratePlan']][$arr['ratePlanCode']][$arr['roomId']]);
}
print_R($output);
//deassemble
$data = array();
foreach($output as $roomName=>$arr1)
{
foreach($arr1 as $ratePlan=>$arr2)
{
foreach($arr2 as $hotelId=>$arr3)
{
foreach($arr3 as $roomId=>$arr4)
{
foreach($arr3 as $roomId=>$arr4)
{
$data[] = array(
'ratePlanCode' => $hotelId,
'roomId' => $roomId,
'roomName' => $roomName,
'ratePlan' => $ratePlan,
'roomRate' => $arr4[0]);
}
}
}
}
}
echo "Final Output";
print_R($data);
我得到这样的输出
[0] => Array
(
[ratePlanCode] => 1
[roomId] => 10
[roomName] => Standard
[ratePlan] => CPAI
[roomRate] => 11000
)
[1] => Array
(
[ratePlanCode] => 10
[roomId] => 10
[roomName] => Standard
[ratePlan] => CPAI
[roomRate] => 12000
)
[2] => Array
(
[ratePlanCode] => 2
[roomId] => 10
[roomName] => test
[ratePlan] => MAP
[roomRate] => 10000
)
[3] => Array
(
[ratePlanCode] => 4
[roomId] => 10
[roomName] => test
[ratePlan] => MAP
[roomRate] => 10000
)
[4] => Array
(
[ratePlanCode] => 3
[roomId] => 10
[roomName] => test123
[ratePlan] => CP
[roomRate] => 10000
)
[5] => Array
(
[ratePlanCode] => 102
[roomId] => 10
[roomName] => test123
[ratePlan] => CP
[roomRate] => 9000
)
[6] => Array
(
[ratePlanCode] => 100
[roomId] => 10
[roomName] => Honeymoon
[ratePlan] => MAP
[roomRate] => 10800
)
[7] => Array
(
[ratePlanCode] => 101
[roomId] => 10
[roomName] => waff
[ratePlan] => MAP
[roomRate] => 10800
)
但是我想获得如下所示的输出,你能帮我解决这个问题吗
[0] => Array
(
[hotelId] => 10
[roomId] => 10
[roomName] => Standard
[ratePlan] => CPAI
[roomRate] => 11000
)
[1] => Array
(
[hotelId] => 10
[roomId] => 10
[roomName] => test
[ratePlan] => MAP
[roomRate] => 10000
)
[2] => Array
(
[hotelId] => 10
[roomId] => 10
[roomName] => test123
[ratePlan] => CP
[roomRate] => 9000
)
[3] => Array
(
[hotelId] => 10
[roomId] => 10
[roomName] => Honeymoon
[ratePlan] => MAP
[roomRate] => 10800
)
正如我搜索的那样,但它不起作用
函数 array_multisort() 很有用,
<?php
$array = array('Alpha', 'atomic', 'Beta', 'bank');
$array_lowercase = array_map('strtolower', $array);
array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array);
print_r($array);
?>
这是
你的答案:)
$mergedArr = array_merge($arr1,$arr2);
$res = [];
foreach($mergedArr as $key=>$val){
$res[$val['roomRate']] = $val['roomName'];
}
//echo '<pre>'; print_R($res);
ksort($res);
$res = array_unique($res);
//echo '<pre>'; print_R($res);
//echo '<pre>'; print_R();
$resultArrFinal = [];
foreach($mergedArr as $key=>$val){
foreach($res as $k=>$v){
if(in_array($k,$val) && in_array($v,$val)){
$resultArrFinal[] = $val;
}
}
//echo $val['roomRate'].' '.$val['roomName'];
}
echo '<pre>'; print_R($resultArrFinal);
如果您想要完全唯一的记录,请在末尾添加此行。
function super_unique($array,$key)
{
$temp_array = array();
foreach ($array as &$v) {
if (!isset($temp_array[$v[$key]]))
$temp_array[$v[$key]] =& $v;
}
$array = array_values($temp_array);
return $array;
}
echo '<pre>'; print_R(super_unique($resultArrFinal,'roomName'));
希望它能帮助你:)