suppose I have a string like the follwing:
01,03,02,15|05,04,06,10|07,09,08,11|12,14,13,16
How to convert it to a 2D array like the follwing using php?:
01 03 02 15
05 04 06 10
07 09 08 11
12 14 13 16
any help will be greatly appreciated, thanks!
asked Jan 9, 2012 at 8:52
smith
5,4718 gold badges36 silver badges40 bronze badges
-
i think the post is similar to stackoverflow.com/questions/3898998/…atul-tagra– atul-tagra2012年01月09日 08:59:46 +00:00Commented Jan 9, 2012 at 8:59
5 Answers 5
This should do the trick:
$tmp = explode( '|', $str );
$data = array();
foreach ( $tmp as $k => $v )
{
$data[] = explode( ',', $v );
}
explode() is your friend.
Jordan Running
107k18 gold badges193 silver badges189 bronze badges
answered Jan 9, 2012 at 8:55
Jan Hančič
54k17 gold badges99 silver badges101 bronze badges
Sign up to request clarification or add additional context in comments.
Comments
$str = '01,03,02,15|05,04,06,10|07,09,08,11|12,14,13,16';
$arr = array_map(function($val) { return explode(',',$val); },explode('|',$str));
var_dump($arr);
PHP>= 5.3.0
answered Jan 9, 2012 at 9:15
Mark Baker
213k34 gold badges354 silver badges391 bronze badges
Comments
Here's a quickie option, which requires PHP 5.3.0 or above (that you should be using anyway).
$string = '01,03,02,15|05,04,06,10|07,09,08,11|12,14,13,16';
$array = array_map('str_getcsv', explode('|', $string));
answered Jan 9, 2012 at 9:15
salathe
52.1k12 gold badges108 silver badges134 bronze badges
Comments
$arr1 = explode("|",$yourString);
$arr2 = array();
for ($i=0;$i<count($arr1);$i++)
$arr2[] = explode(",",$arr1[i]);
answered Jan 9, 2012 at 8:58
Tamer Shlash
9,5636 gold badges47 silver badges88 bronze badges
Comments
$str = "01,03,02,15|05,04,06,10|07,09,08,11|12,14,13,16 ";
$array = explode('|', $str);
$final_array = array();
foreach($array as $val)
{
array_push($final_array, explode(',', $val));
}
answered Jan 9, 2012 at 8:59
redmoon7777
4,5361 gold badge26 silver badges26 bronze badges
Comments
lang-php