Php 组合单个数组的两个值
如何组合到多维数组的记录。我通过Php 组合单个数组的两个值,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,如何组合到多维数组的记录。我通过array\u merge合并了两个多维数组,在数组合并之后,我得到了一个数组。在这个数组中,我为元素应收,销售日期,应付款和购买日期设置了一个数组 这是我的数组: Array ( [0] => Array ( [receivable] => 20 [sale_date] => 2014-06-24 ) [1] => Array ( [receivable] => 400 [sale_d
array\u merge
合并了两个多维数组,在数组合并之后,我得到了一个数组。在这个数组中,我为元素应收
,销售日期
,应付款
和购买日期
设置了一个数组
这是我的数组:
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 )
)
$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);
现在我想检查sale\u date
和purchase\u date
是否相同,然后我得到一个数组中的应收款
和应付款
。如果它们不一样,我就照原样做。我已经尝试了很多事情,现在我遇到了困难,不知道该怎么办
这是我渴望的结果:
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代码:
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 )
)
$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);
}
为什么会有一个负号?您还应该能够在循环中使用if语句以您最初指定的方式表示数组-尽管我认为通常每个对象上具有不同值的数组可能更难处理。我正在尝试调试查询中存在语法错误,但它没有帮助。当我在mysql中运行查询时这是大括号的give me语法错误和完全外部连接的it give me错误。我的错误-完全外部连接在MySQL中不可用。尝试上面更新的查询。感谢现在我正在工作,但它不会向我显示应付款为空且我在应收款中有值的日期。