php条件从json数据中过滤结果

标签 php mysql json codeigniter

我正在尝试从 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/

相关文章:

mysql - 将数据库从多个位置同步到中央数据库的策略,反之亦然

json - Android - 具有基本身份验证的 HttpClient JSON POST

mysql - 调试卡住的go程序

php - 如何在 PHP 中将字符串转换为 JSON 对象

php - SHA1 与 md5 与 SHA256 : which to use for a PHP login?

select - mysql 检索部分列

javascript - d3.js 从 url 获取 JSON

php - 设置 Guzzle 检索的最大内容量

php - XMLHTTPrequest 将 JSON 字符串作为原始发布数据传递

mysql - 如何在 sails.js 中正确设计 Web 应用程序?