我正在尝试从 payment_status = paid 的数据库中获取 grand_total 结果,请查看我的数据库结构和代码,它不返回付费状态付款结果返回所有结果
这是数据库结构和数据
ref_id | payment_status | grand_total
19 | [{"admin":"","status":"due"}] | 100
19 | [{"admin":"","status":"paid"}] | 50
19 | [{"admin":"","status":"paid"}] | 500
这是我目前的功能
function total_referral_purchase($referral_id)
{
$return = 0;
$sales = $this->db->get('sale')->result_array();
foreach ($sales as $row) {
$payment_status = json_decode($row['payment_status'],true);
$status = $payment_status['status'];
if ($row['ref_id'] == $referral_id && $status == 'paid' ) {
$return += $row['grand_total'];
}
}
return $this->cart->format_number($return);
}
我得到的结果 = 0
预期结果 = 550
编辑:
var_dump array(1) {
[0]=> array(20) {
["sale_id"]=> string(3) "202"
["sale_code"]=> string(9) "201906202"
["buyer"]=> string(1) "1"
["guest_id"]=> NULL
["ref_id"]=> string(2) "19"
["commission"]=> string(4) "8.83"
["grand_total"]=> string(5) "83.63"
["payment_status"]=> string(30) "[{"admin":"","status":"paid"}]"
["payment_details"]=> string(4) "none"
["payment_timestamp"]=> NULL
["sale_datetime"]=> string(10) "1559492618"
["delivary_datetime"]=> string(0) ""
["delivery_status"]=> string(65) "[{"admin":"","status":"pending","comment":"","delivery_time":""}]"
["viewed"]=> string(2) "ok"
}
}
最佳答案
json_decode
函数根据您的 json 格式返回一个数组。
所以你当前代码的结果
json_decode($row['payment_status'],true);
返回一个具有这种格式的数组
array(1) {
[0]=>
array(2) {
["admin"]=>
string(0) ""
["status"]=>
string(4) "paid"
}
}
因为 json 周围的“[]”意味着它将有多个记录并将其解析为一个数组。
所以 $status
总是空的,应该被替换为
$status = $payment_status[0]['status'];
或者更改数据库中的格式,如 '{"admin":"","status":"paid"}'
以您当前的方式工作。
关于php条件从json数据中过滤结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56423629/