如何在PHP中通过解码匹配json字符串中的字符串

如何在PHP中通过解码匹配json字符串中的字符串,php,json,payu,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",

因此,我有一个来自支付网关的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
的值,因此我必须通过调用API从付款日到接下来的7天来查找该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;
}
函数递归输出检查($date\u of\u payment,$payment\u reference,$rec\u counter=7){
$date=substr(付款日期,0,10);
$utrNos='';$brtoggle=false;
对于($i=1;$icallPayU($sett_日期);
$utrnos=数组('status'=>0);
如果(!为null($responsePayu)){
$utrNos=json_decode($responsePayu,true);
foreach($utrNos['Txn_details']作为$value){
#代码。。。
如果($value['requestid']==$payment\u reference){
$utrnos['status']=1;
$utrnos['data']=$value;
$brtoggle=true;
打破
}
}
如果($brtoggle)
打破
}
}
返回$utrnos;
}
我的问题是,如果假设一天有2000笔付款,那么for循环将有2000次的乐趣,它必须每天继续这样做,直到它得到id

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

因此,我在想是否有更好的方法将字符串
requestid
直接匹配到json字符串中?因此,我认为性能可能比解码和检查数组要好一些


谢谢

您可以使用
preg_match
,但是我认为您正在尝试在这里进行微优化。我们每天都会对json_解码、json_编码等进行数千次,这对我们的系统没有太大影响。另一个额外的好处是,json_解码可以创建清晰的代码。@jardis,谢谢您的链接是的,我想到了我实现pregmatch,但由于不擅长正则表达式,因此使用了另一种方式,因此根据您的说法,即使一天内有数百万笔交易,也可能不会影响流程?关键词是可能。您必须对其进行基准测试,并查看其在不同规模下的表现。不要预先优化,这是故事的寓意:)。