如何匹配json字符串中的字符串与PHP中的解码

时间:2016-10-04 04:20:00

标签: php json payu

所以我有一个来自支付网关的API,它会在一天之内返回所有交易,这些交易是Json格式的。

{  
   "status":"1",
   "msg":"3 transactions settled on 2016-09-29",
   "Txn_details":[  
      {  
         "payuid":"58800xxxxxx",
         "txnid":"xxxxxx-27410",
         "txndate":"2016-09-27 11:06:58",
         "mode":"DC",
         "amount":"15174.51",
         "requestid":"xxxxxxxx",
         "requestdate":"2016-09-29 18:17:18",
         "requestaction":"capture",
         "requestamount":"15174.51",
         "mer_utr":"xxxxxxx",
         "mer_service_fee":"151.75000",
         "mer_service_tax":"22.76000",
         "mer_net_amount":"15000.00000",
         "bank_name":"VISA",
         "issuing_bank":"xxxxxx",
         "merchant_subvention_amount":"0.00"
      },
      {  
         "payuid":"58800xxxxxx",
         "txnid":"xxxxxx-27410",
         "txndate":"2016-09-27 11:06:58",
         "mode":"DC",
         "amount":"15174.51",
         "requestid":"xxxxxxxx",
         "requestdate":"2016-09-29 18:17:18",
         "requestaction":"capture",
         "requestamount":"15174.51",
         "mer_utr":"xxxxxxx",
         "mer_service_fee":"151.75000",
         "mer_service_tax":"22.76000",
         "mer_net_amount":"15000.00000",
         "bank_name":"VISA",
         "issuing_bank":"xxxxxx",
         "merchant_subvention_amount":"0.00"
      }
   ]
}

所以在这个Json中我必须查找一个名为requestid的值,所以我必须通过从付款当天到下一个7天调用API来查找该ID 并匹配每天的每个记录天气requestid。我的代码就像这样

function recursiveUTNRcheck($date_of_payment,$payment_reference,$rec_counter=7){

    $date = substr($date_of_payment, 0, 10);
    $utrNos ='';$brtoggle=false;
    for($i=1;$i<=$rec_counter;$i++){
        $sett_date= date('Y-m-d', strtotime($date. ' + '.$i.' days'));
        $responsePayu = $this->callPayU($sett_date);
        $utrnos=array('status'=>0);
        if(!is_null($responsePayu)){

            $utrNos = json_decode($responsePayu,true);

            foreach ($utrNos['Txn_details'] as $value) {
                # code...
                if($value['requestid']==$payment_reference){
                    $utrnos['status']=1;
                    $utrnos['data'] = $value;
                    $brtoggle=true;
                    break;
                }
            }

            if($brtoggle)
            break;
        }
    }
    return $utrnos;
}

我的问题是,如果假设一天有2000次付款,那么for循环将不得不乐趣2000次,并且必须每天继续这样做,直到它获得它为止,

最坏情况可能是7*2000 = 14000次。

所以我想可以有更好的方法将字符串requestid直接匹配到json字符串中吗?所以我认为性能可能比解码和检查数组要好一些。

谢谢

0 个答案:

没有答案