繁体   English   中英

合并单个数组的两个值

[英]Combine two values of a single array

我如何结合到多维数组的记录。 数组合并后,我通过array_merge合并了两个多维数组。 在这个数组中,我有receivablesale_datepayablespurchase_date

这是我的数组:

Array
(
    [0] => Array
        ( [receivable] => 20 [sale_date] => 2014-06-24 )
    [1] => Array
        ( [receivable] => 400 [sale_date] => 2014-06-28 )
    [2] => Array
        ( [receivable] => 3410 [sale_date] => 2014-07-04 )
    [3] => Array
        ( [receivable] => 923 [sale_date] => 2014-07-07 )
    [4] => Array
        ( [receivable] => 1203 [sale_date] => 2014-08-15 )
    [5] => Array
        ( [payables] => 9800 [purchase_date] => 2014-06-23 )
    [6] => Array
        ([payables] => 0 [purchase_date] => 2014-06-24 )
    [7] => Array
        ( [payables] => 16155 [purchase_date] => 2014-06-28 )
    [8] => Array
        ( [payables] => 993 [purchase_date] => 2014-08-18 )
) 

现在,我想检查sale_datepurchase_date是否相同,然后得到数组中的receivablepayables 如果他们不一样,那么我就这样。 我已经尝试了很多事情,现在我碰壁了,不知道该怎么办。

这是我的愿望结果:

  Array
(
    [0] => Array
        ( [purchase_date] => 2014-06-24 [sale_date] => 2014-06-24 [receivable] => 20 [payables] => 0 )
    [1] => Array
        ( [sale_date] => 2014-06-28 [purchase_date] => 2014-06-28 [payables] => 16155 [receivable] => 400 )
    [2] => Array
        ( [receivable] => 3410 [sale_date] => 2014-07-04 )
    [3] => Array
        ( [receivable] => 923 [sale_date] => 2014-07-07 )
    [4] => Array
        ( [receivable] => 1203 [sale_date] => 2014-08-15 )
    [5] => Array
        ( [payables] => 9800 [purchase_date] => 2014-06-23 )
    [6] => Array
        ( [payables] => 993 [purchase_date] => 2014-08-18 )    
)  

这是我的PHP代码:

$query_sale = "SELECT sum( `sale_received` ) AS receivable, `sale_date`
               FROM `sale`
               GROUP BY `sale_date`
               ORDER BY `sale_date` ";
$result_sale = mysqli_query($con,$query_sale);

$query_purchase = "SELECT sum( `purchase_remaining` ) AS payables, `date`
                   FROM `purchase`
                   GROUP BY `date`
                   ORDER BY `date`";
$result_purchase = mysqli_query($con,$query_purchase);

$array_receivable = array();
$array_payables = array();

while($sale = mysqli_fetch_array($result_sale)){
$receivable = $sale['receivable'];
$sale_date  = $sale['sale_date'];

$array_receivable[] = array('receivable' => $receivable , 'sale_date' => $sale_date);
}
while($purchase = mysqli_fetch_array($result_purchase)){
$payables   = $purchase['payables'];
$purchase_date = $purchase['date'];

$array_payables[] = array('payables' => $payables , 'purchase_date' => $purchase_date);
}
$both_array = array_merge($array_receivable , $array_payables);

编写以这种方式返回数据的SQL查询可能会更容易。

例如:

SELECT (CASE WHEN B.date IS NULL THEN A.sale_date ELSE B.date END) As date, (CASE WHEN payables IS NOT NULL THEN payables ELSE 0 END) As payables,
    CASE WHEN receivable IS NOT NULL THEN receivable ELSE 0 END) As receivable
FROM (SELECT sum( sale_received ) AS receivable, sale_date
           FROM sale
           GROUP BY sale_date) A
LEFT JOIN    ( SELECT sum( purchase_remaining ) AS payables, date
               FROM purchase
               GROUP BY date ) B
ON A.sale_date = B.date
UNION
SELECT (CASE WHEN B.date IS NULL THEN A.sale_date ELSE B.date END) As date, (CASE WHEN payables IS NOT NULL THEN payables ELSE 0 END) As payables,
    CASE WHEN receivable IS NOT NULL THEN receivable ELSE 0 END) As receivable
FROM (SELECT sum( sale_received ) AS receivable, sale_date
           FROM sale
           GROUP BY sale_date) A
RIGHT JOIN    ( SELECT sum( purchase_remaining ) AS payables, date
               FROM purchase
               GROUP BY date ) B
ON A.sale_date = B.date

这应该在两个表中的每个日期都返回应付帐款和应收帐款的值,并且在特定日期只有一个值的地方,另一个将是0。

也许在PHP中是这样的:

$query =     "SELECT (CASE WHEN B.date IS NULL THEN A.sale_date ELSE B.date END) As date, (CASE WHEN payables IS NOT NULL THEN payables ELSE 0 END) As payables, ".
"    CASE WHEN receivable IS NOT NULL THEN receivable ELSE 0 END) As receivable ".
"FROM (SELECT sum( sale_received ) AS receivable, sale_date ".
"           FROM sale ".
"           GROUP BY sale_date) A ".
"LEFT JOIN    ( SELECT sum( purchase_remaining ) AS payables, date ".
"               FROM purchase ".
"               GROUP BY date ) B ".
"ON A.sale_date = B.date ".
"UNION ".
"SELECT (CASE WHEN B.date IS NULL THEN A.sale_date ELSE B.date END) As date, (CASE WHEN payables IS NOT NULL THEN payables ELSE 0 END) As payables, ".
"    CASE WHEN receivable IS NOT NULL THEN receivable ELSE 0 END) As receivable ".
"FROM (SELECT sum( sale_received ) AS receivable, sale_date ".
"           FROM sale ".
"           GROUP BY sale_date) A ".
"RIGHT JOIN    ( SELECT sum( purchase_remaining ) AS payables, date ".
"               FROM purchase ".
"               GROUP BY date ) B ".
"ON A.sale_date = B.date";

$result = mysqli_query($con,$query);

$both_array = [];

while($row = mysqli_fetch_array($result)){
    $date = $row['date'];
    $receivable = $row['receivable'];
    $payable  = $row['payables'];

    $both_array[] = array('date' => $date , 'receivable' => $receivable, 'payable' =>     $payables);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM