CI PHP:在使用Double foreach循环并将其转动JSON ENCODE时,如何将数据保存在数组中



我想从没有关系的两个表中获取数据,我使用foreach通过选定的键获取所有数据,并将数据从两个表收集到数组中。当我使用foreach获取两个表时,如何将数据保存在数组中?我正在使用CodeIgniter框架。这是代码:

$price = $this->pricing->get_by($hc); //get from pricing
foreach ($price as $ps){
   $promo = $this->discount->get_by($ps['key1'],$ps['key2']); //get from discount
   foreach ($promo as $k) {
      if ($k['keyA']!='percent') {
         $pricing = $ps['key3'] - $k['keyB'];   
         $data = array(
            'room_code'=>$ps['key1'],
            'price_code'=>$ps['key2'],
            'price'=>$ps['key3'],
            'discount_type'=>$k['keyA'],
            'disc'=>$k['keyB'],
            'finalprice'=>$pricing
          );
       } 
       elseif ($k['keyA']=='percent') {
          $pricing = $ps['key3'] - ($ps['key3'] * $k['keyB']/100);
          $data = array(
            'room_code'=>$ps['key1'],
            'price_code'=>$ps['key2'],
            'price'=>$ps['key3'],
            'discount_type'=>$k['keyA'],
            'disc'=>$k['keyB'],
            'finalprice'=>$pricing
          );                                
       }    
     print_r($data);
     // echo json_encode($data);
     }
}

我得到了这样的沮丧:

Array
(
[room_code] => 1212    
[price_code] => P1
[price] => 500
[discount_type] => amount
[disc] => 20
[finalprice] => 480
)
Array
(
[room_code] => 1213
[price_code] => P2
[price] => 500
[discount_type] => percent
[disc] => 50
[finalprice] => 250
)

如果我将结果换成这样的结果:

{"room_code":"1212","price_code":"P1","price":"500","discount_type":"amount","disc":"20","finalprice":480}{"room_code":"1213","price_code":"P2","price":"500","discount_type":"percent","disc":"50","finalprice":250}

这不是有效的JSON格式,所以请帮助..

您可以这样做:

$price = $this->pricing->get_by($hc); //get from pricing
$data_arr = array();
foreach ($price as $ps){
   $promo = $this->discount->get_by($ps['key1'],$ps['key2']); //get from discount
   foreach ($promo as $k) {
      if ($k['keyA']!='percent') {
         $pricing = $ps['key3'] - $k['keyB'];   
         $data = array(
            'room_code'=>$ps['key1'],
            'price_code'=>$ps['key2'],
            'price'=>$ps['key3'],
            'discount_type'=>$k['keyA'],
            'disc'=>$k['keyB'],
            'finalprice'=>$pricing
          );
       } 
       elseif ($k['keyA']=='percent') {
          $pricing = $ps['key3'] - ($ps['key3'] * $k['keyB']/100);
          $data = array(
            'room_code'=>$ps['key1'],
            'price_code'=>$ps['key2'],
            'price'=>$ps['key3'],
            'discount_type'=>$k['keyA'],
            'disc'=>$k['keyB'],
            'finalprice'=>$pricing
          );                                
       }    
       $data_arr[] = $data;
     }
}
echo json_encode($data_arr);

结果应该是有效的JSON数组:

[{"room_code":"1212","price_code":"P1","price":"500","discount_type":"amount","disc":"20","finalprice":480},{"room_code":"1213","price_code":"P2","price":"500","discount_type":"percent","disc":"50","finalprice":250}]

尝试一下,
您的$数据是重叠的,因此我只是将其转换为一个数组,因此所有数据都将存储在其中。

$price = $this->pricing->get_by($hc); //get from pricing
$mainData = array();
foreach ($price as $ps){
   $promo = $this->discount->get_by($ps['key1'],$ps['key2']); //get from discount
 if(!empty($promo)){
   foreach ($promo as $k) {
      if ($k['keyA']!='percent') {
         $pricing = $ps['key3'] - $k['keyB'];   
         $data = array(
            'room_code'=>$ps['key1'],
            'price_code'=>$ps['key2'],
            'price'=>$ps['key3'],
            'discount_type'=>$k['keyA'],
            'disc'=>$k['keyB'],
            'finalprice'=>$pricing
          );
       } 
       elseif ($k['keyA']=='percent') {
          $price = $ps['key3'] - ($ps['key3'] * $k['keyB']/100);
          $data = array(
            'room_code'=>$ps['key1'],
            'price_code'=>$ps['key2'],
            'price'=>$ps['key3'],
            'discount_type'=>$k['keyA'],
            'disc'=>$k['keyB'],
            'finalprice'=>$pricing
          );                                
       }
       array_push($mainData,$data);    
    }
  }
}

最新更新