dqg2269 2015-12-28 09:38
浏览 101
已采纳

将字符串转换为单个数组,PHP

I am working in a Laravel project. I want to convert a string into single array in efficient way.

String is $string = txn_status=0|txn_msg=success|txn_err_msg=NA|clnt_txn_ref=969239|tpsl_bank_cd=470|tpsl_txn_id=192630337|txn_amt=1.00|clnt_rqst_meta={itc:NIC~TXN0001~122333~rt14154~8 mar 2014~Payment~forpayment}{custname:test}|tpsl_txn_time=26-12-2015 15:56:20|tpsl_rfnd_id=NA|bal_amt=NA|rqst_token=hdfs-df-jkfhskjfhsjkd|hash=jhdsfs54367jhf,

And I want output look like below format. It is a json format:-

[ txn_status: "0",
  txn_msg : "success",
  txn_err_msg: "NA",
  .
  .
  .


  hash: "XYZ" ]
  • 写回答

3条回答 默认 最新

  • doukengzi3517 2015-12-28 10:35
    关注

    You could use the preg_match_all in conjunction with the array_combine like this:

    $string = "txn_status=0|txn_msg=success|txn_err_msg=NA|clnt_txn_ref=969239|tpsl_bank_cd=470|tpsl_txn_id=192630337|txn_amt=1.00|clnt_rqst_meta={itc:NIC~TXN0001~122333~rt14154~8 mar 2014~Payment~forpayment}{custname:test}|tpsl_txn_time=26-12-2015 15:56:20|tpsl_rfnd_id=NA|bal_amt=NA|rqst_token=hdfs-df-jkfhskjfhsjkd|hash=jhdsfs54367jhf";
    
    preg_match_all("/([^|]+)=([^|]+)/", $string, $array);
    
    $output = array_combine($array[1], $array[2]);
    
    echo json_encode($output, JSON_PRETTY_PRINT);
    

    http://ideone.com/eXf5K2

    Or the preg_split like this:

    $array = preg_split("/[|=]/", $string);
    $output = [];
    
    for ($i=0; $i<count($array); $i++) {
        $output[$array[$i]] = $array[++$i];
    }
    

    http://ideone.com/Y5k5bV

    Or a simplified version of @devpro's code:

    $array = explode("|", $string);
    $output = [];
    
    foreach ($array as $v) {
        list($key, $value) = explode("=", $v);
        $output[$key] = $value;
    }
    

    http://ideone.com/svrj8S

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同