1

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 Answers 3

5

You can split as like that try 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";
$firstArray = explode("|", $string);
foreach ($firstArray as $key => $value) {
    $newArr = explode("=", $value);
    $myRequiredArr[$newArr[0]] = $newArr[1];
}

echo "<pre>"; // just for formatting
print_r($myRequiredArr); // print your result

Result is:

Array
(
    [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
)
Sign up to request clarification or add additional context in comments.

2 Comments

This won't give the OP the result they expect. It will give a list of values like "txn_status=0", while the OP wants txn_status to be the key and 0 to be the value.
Sorry, but it gives result like this ["txn_status=0", "txn_msg=success",....], but I don't want like this format.
2

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

1 Comment

Hey pespantelis, thanx for answering multi solutions. May i know the solution if i want to break {key1:value1} {key2:value2}....{keyN:valueN} in above array. For ex, this whole value- {itc:NIC~TXN0001~122333~rt14154~8 mar 2014~Payment~forpayment} {custname:test}
1

You can use the combination of php functions explode , array_map and call_user_func_array like as

$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";
$arr = array();
array_map(function($v)use(&$arr){ $a = explode("=",$v); return $arr[$a[0]]  = $a[1];},explode('|',$string));
print_r($arr);

Working Demo

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.