2016-01-29 3 views
0

Я работаю над проектом сайта путешествия. Я хочу сравнить два массива, но когда я пытаюсь добавить новые вещи в массив, остановка фильтрации. Я хочу фильтровать, как если бы две комнаты были равны, а затем проверить его план и показать комнату с минимальной скоростью и другим оставшимся результатом. я написал ниже код для егоФильтрация Не работает в массиве

 $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 
     ) 

    [4] => Array 
     (
      [hotelId] => 10 
      [roomId] => 10 
      [roomName] => waff 
      [ratePlan] => MAP 
      [roomRate] => 10800 
     ) 

ответ

1

я заметил в ваш первый кодовый блок два вложенных петли foreach, которые кажутся одинаковыми.

foreach($arr3 as $roomId=>$arr4) 
      { 
       foreach($arr3 as $roomId=>$arr4) 
       { 

        $data[] = array( 
        'ratePlanCode' => $hotelId, 
        'roomId' => $roomId, 
        'roomName' => $roomName, 
        'ratePlan' => $ratePlan, 
        'roomRate' => $arr4[0]); 
       } 
      } 

Кроме того, если вы сначала определить $ arr1 и $ arr2, а также при определении $ данных внутри вложенных циклов по каждому элементу, можно использовать клавиши, которые соответствуют в точности с именами вашего выхода в. Я почти уверен, что именно поэтому вы получаете результат с именами, которые не так, как вы хотите.

Затем ваш выход имеет массивы как из $ arr1, так и из $ arr2, так как вы не отфильтровали те, у которых уникальные комнаты. Я написал очень простой мысленный кусок кода для создания нового массива, содержащего уникальное имя комнаты, упорядоченного по возрастанию по скорости и плану из $ data123. Код от функций из SO answer:

$keeper = array(''); 
$uniquedata = array(); 
$data123 = array_merge($arr1,$arr2); 

function DSort2($item1,$item2) 
{ 
    if ($item1['ratePlan'] == $item2['ratePlan']) return 0; 
    return ($item1['ratePlan'] > $item2['ratePlan']) ? 1 : -1; 
} 

usort($data123,'Dsort2'); 

function DSort($item1,$item2) 
{ 
    if ($item1['roomRate'] == $item2['roomRate']) return 0; 
    return ($item1['roomRate'] > $item2['roomRate']) ? 1 : -1; 
} 
usort($data123,'Dsort'); 

foreach($data123 as $array) { 
if(!in_array($array['roomName'],$keeper)) { 
    array_push($keeper, $array['roomName']); 
    array_push($uniquedata,$array); 
    } 
} 

Далее я реорганизовать/переименовать вещи так выглядит результат твоей:

$uniquedata = array_map(function($uniquedata) { 
    return array(
     'hotelId' => $uniquedata['whotel'], 
     'roomId' => $uniquedata['roomId'], 
     'roomName' => $uniquedata['roomName'], 
     'ratePlan' => $uniquedata['ratePlan'], 
     'roomRate' => $uniquedata['roomRate'] 
    ); 
}, $uniquedata); 

print_r($uniquedata); 

Вы найдете все массивы вы нежелательны в вашем выводе, с правильным ключей и значений в правильном порядке. Порядок массивов различен, так как в моем методе я заказывал увеличение значения скорости. Вы можете легко изменить это, выполняя функции упорядочения. С наилучшими пожеланиями.

+0

На самом деле это было по ошибке – BeDeveloper

+0

@BeDeveloper Я вижу, не беспокойтесь. Просто пытаюсь помочь вам отлаживать. Вы видели второй комментарий о том, как вы определяете $ arr1 и $ arr2? – MathBio

+0

Итак, я должен определить, что при запуске – BeDeveloper

Смежные вопросы