我正在尝试从付款状态=已付款的数据库中获取grand_total结果,请查看我的数据库结构,并编写代码,使其不返回已付款状态的付款结果并返回所有结果
这是数据库结构和数据
error 401
到目前为止,这是我的职责
ref_id | payment_status | grand_total
19 | [{"admin":"","status":"due"}] | 100
19 | [{"admin":"","status":"paid"}] | 50
19 | [{"admin":"","status":"paid"}] | 500
我得到的结果= 0
预期结果= 550
编辑:
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 :(得分:3)
json_decode
函数根据您的json格式返回一个数组。
因此,您当前代码的结果
json_decode($row['payment_status'],true);
以这种格式返回数组
array(1) {
[0]=>
array(2) {
["admin"]=>
string(0) ""
["status"]=>
string(4) "paid"
}
}
因为json周围有'[]',这意味着它将具有多个记录并将其解析为数组。
因此$status
始终为null,应替换为
$status = $payment_status[0]['status'];
或从'{"admin":"","status":"paid"}'
之类的数据库中更改格式,以当前方式使用。
答案 1 :(得分:2)
您使用的JSON是一个数组,如方括号所示。
有两种方法可以解决此问题:
[{"admin":"","status":"due"}]
更改为{"admin":"","status":"due"}
。这使它成为单个JSON对象而不是数组。$status = $payment_status['status'];
代替$status = $payment_status[0]['status'];
,它从数组的第一个对象中选择“状态”的值。