如何解决重复数据

时间:2019-07-17 07:10:11

标签: php codeigniter foreach

我是Codeigniter的新手,我的问题是当我在彼此之间使用两个foreach循环时如何解决重复数据。当我使用循环时,它会重复数据,而当在循环外使用循环值时,它只会打印出最后一个值来求解。

 if ($invoiceResult->to_type == 'customer') 
        {
            $prodIds = isset($invoiceResult->pIds) && !empty($invoiceResult->pIds) ? rtrim($invoiceResult->pIds, ',') : '0';
            $stockIds = 0;
            if(isset($invoiceResult->sid) && $invoiceResult->sid != ' ')
            {
                $stockIds = rtrim($invoiceResult->sid, ',');
            }

            $printproduct = "SELECT p.pId,s.pId AS st_id, s.barcode, p.pPrice, p.pModel,p.HSNSAC,p.CGST,p.SGST,c.cName from  products p LEFT JOIN stock s ON p.pId = s.pId INNER JOIN category c ON p.cId = c.cId where s.sId IN (" . $stockIds . ") OR p.pId IN (" . $prodIds . ")";
            $query = $this->Main_model->__callMasterquery($printproduct);
            $printproresult = $query->result();
            $inVocRow = $query->row();
            $qtyResult = explode(",", $invoiceResult->pQtys);
        }
foreach ($printproresult as $key =>  $inVocRow ) 
        {

            $barcode = isset($inVocRow->barcode) ? $inVocRow->barcode : "N/A";

            $cgstRate = $inVocRow->CGST;
            $sgstRate = $inVocRow->SGST;
            $qty = ($inVocRow->barcode) ? 1 : $qtyResult[$key] ;
            print_r($qty);
            $prodPrice = ($inVocRow->barcode) ? $inVocRow->pPrice : $inVocRow->pPrice * $qty;


            $cgst = ((float)$prodPrice * $cgstRate) / 100;
            $sgst = ($prodPrice * $sgstRate) / 100;
            $cgstTotals += $cgst;
            $sgstTotals += $sgst;
            $gstRates += ($cgst + $sgst);
            $output .= '<tr>
                            <td style="border-bottom:1px solid rgba(0, 0, 0, 0.125);text-align:center;">' . $i++ . '</td>
                            <td style="border-bottom:1px solid rgba(0, 0, 0,0.125);text-align:center;">' . $inVocRow->cName . ': ' . $inVocRow->pModel . '</td>
                            <td style="border-bottom:1px solid rgba(0, 0, 0, 0.125);text-align:center;">' . $barcode . '</td>
                            <td style="border-bottom:1px solid rgba(0, 0, 0,0.125);text-align:center;">' . $inVocRow->HSNSAC . '</td>
                            <td style="border-bottom:1px solid rgba(0, 0, 0,0.125);text-align:center;">' . $Gst = $inVocRow->CGST + $inVocRow->SGST . '%</td>
                            <td style="border-bottom:1px solid rgba(0, 0, 0, 0.125);text-align:center;">' . $inVocRow->pPrice . '</td>
                            <td style="border-bottom:1px solid rgba(0, 0, 0, 0.125);text-align:center;"">' . $prodPrice . '</td>
                            <td style="border-bottom:1px solid rgba(0, 0, 0, 0.125);text-align:center;"></td>
                        </tr>';
            $TotalAmount += $prodPrice;
        }exit();

实际上,这是两种类型的产品,一种是条形码,另一种是非条形码产品。条形码产品无数量,非条形码产品无数量。当我购买两种类型的产品时,然后显示

  

未定义偏移量:2和未定义偏移量:3

因为条形码产品不包含数量。我找到一种解决方案,该解决方案对条形码产品进行计数,然后用于循环并使用数量= 1,并将其添加到数量数组中并乘以产品价格,但是当我在foreach循环中使用它时,它将重复该值。如果我在foreach循环之前使用它,那么它只会打印最后一个值,或者如果我在foreach循环中使用它,那么它将重复执行,并且每个数量乘以每个产品价格。我如何解决它。如果还有其他类型可以解决数量数组问题,请提出建议。

1 个答案:

答案 0 :(得分:0)

使用in_array函数来解决例如:-

$user = [];
if(in_array($user_data->mobile,$user)){
     $user[] = $user_data->mobile; @endphp
}else{
    '<option value="{{$user_data->mobile}}">'. ucfirst($user_data->name) .'</option>';
}