I have an input string that has the following value:
"[2018-05-08][1][17],[2018-05-08][2][31],[2018-05-08][3][40],[2018-05-08][4][36],[2018-05-09][1][21]"
I want to convert this into a php array that looks something like this:
$date=2018-05-08;
$meal=1;
$option=17;
can someone help me please !
Simple parser for You
$arr1 = explode (",","[2018-05-08][1][17],[2018-05-08][2][31],[2018-05-08][3][40],[2018-05-08][4][36],[2018-05-09][1][21]"); // making array with elements like : [0] => "[2018-05-08][1][17]"
$arr2;
$i = 0;
foreach($arr1 as $item){
$temp = explode ("][",$item); // array with elements like [0] => "[2018-05-08", [1] => "1", [2] => "21]"
$arr2[$i]['date'] = substr( $temp[0], 1 ); // deleting first char( '[' )
$arr2[$i]['meal'] = $temp[1];
$arr2[$i]['option'] = substr($temp[2], 0, -1); // deleting last char( ']' )
$i++;
}
you cannot set array to variable .If you want convert string to array, i think my code example may help you:
$a= "[2018-05-08][1][17],[2018-05-08][2][31],[2018-05-08][3][40],[2018-05-08][4][36],[2018-05-09][1][21]";
$b= explode(",",$a );
foreach ($b as $key =>$value) {
$b[$key] = str_replace("[", " ", $b[$key]);
$b[$key] = str_replace("]", " ", $b[$key]);
$b[$key] =explode(" ",trim($b[$key]) );
}
print_r($b);
<?php
$data="[2018-05-08][1][17],[2018-05-08][2][31],[2018-05-08][3][40],[2018-05-08][4][36],[2018-05-09][1][21]";
$data=explode(',',$data);
foreach($data as $row){
preg_match_all('#\[(.*?)\]#', $row, $match);
$date=$match[1][0];
$meal=$match[1][1];
$option=$match[1][2];
}
This will store the values you need into the variables. I would suggest to store them in arrays and not variables so you can handle them outside of the foreach
loop but that's up to you.
$results = array_map(
function ($res) {
$res = rtrim($res, ']');
$res = ltrim($res, '[');
return explode('][', $res);
},
explode(',', $yourString)
);
//get variables for first element of array
list($date, $meal, $option) = $results[0];