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 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏