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 我下载图形界面重启完就变成这样了,打字也打不了,动也动不了,该怎么解决(操作系统-centos)
  • ¥15 VBA中在窗体中遍历所有checkbox控件,提取出被选中的checkbox的caption值
  • ¥15 在Ubuntu上有什么命令,或者是系统文件能告诉我链接nvme ssd的pcie槽位是不是支持热插拔功能?
  • ¥15 ansys license许可证问题
  • ¥20 QQ号和密码都能正常登录微信 QQ号和密码登录微信显示密码错误
  • ¥15 qiankun主应用注册子应用提示跨域
  • ¥15 单片机RTOS Kernel与应用分离开发,Kernel如何调起应用?
  • ¥15 快手小店商家版APP怎么第三方APP跳转到指定用户聊天界面
  • ¥15 为什么AVL fire软件仿真时的步长改变了,仿真结果也会改变
  • ¥100 如何帮我写一个java小游戏