PHP array of strings seperated in columns to associative array -
this question has answer here:
- explode string 1 or more spaces or tabs 8 answers
i have unix disk output want convert associated array each line user can pick available disks use next vg creation.
output of current array item. there 1 white space between each column did tab's easier read.
array(11) { [0]=> string(141) "vg1 lvm 136g /dev/cciss/c0d0p2 n/a n/a local n/a n/a no " [1]=> string(141) "vg2 lvm 1g /dev/mapper/mpath28p1 60060e80166fa70000016fa700000013 /dev/dm-33 r700 ls1000 0013 yes " [2]=> string(141) "vg3 lvm 60g /dev/mapper/mpath27p1 60060e80166fa70000016fa700000012 /dev/dm-34 r700 ls1000 0012 yes " [3]=> string(141) "vg4 lvm 60g /dev/mapper/mpath29p1 60060e80166fa70000016fa700000014 /dev/dm-35 r700 ls1000 0014 no " [4]=> string(141) "***available*** free 2g /dev/mapper/mpath21p1 60060e80167220000001722000000048 /dev/dm-37 r700 ls2000 0048 yes " [5]=> string(141) "***available*** free 2g /dev/mapper/mpath22p1 60060e80167220000001722000000049 /dev/dm-36 r700 ls2000 0049 yes " [6]=> string(141) "***available*** free 90g /dev/mapper/mpath23p1 60060e80166fa70000016fa70000000e /dev/dm-31 r700 ls1000 000e yes " [7]=> string(141) "***available*** free 90g /dev/mapper/mpath24p1 60060e80166fa70000016fa70000000f /dev/dm-39 r700 ls1000 000f yes " [8]=> string(141) "***available*** free 90g /dev/mapper/mpath25p1 60060e80166fa70000016fa700000010 /dev/dm-30 r700 ls1000 0010 yes " [9]=> string(141) "***available*** free 90g /dev/mapper/mpath26p1 60060e80166fa70000016fa700000011 /dev/dm-32 r700 ls1000 0011 yes " [10]=> string(141) "***available*** free 2g /dev/mapper/mpath30p1 60060e80167220000001722000000047 /dev/dm-38 r700 ls2000 0047 yes " i want end this. i've been trying different foreach loops haven't got work yet. help/suggestions appreciated.
[0] => name=>vg1 type=>lvm lun_size=>136g mpath_name=>/dev/cciss/c0d0p2 flun_id=>n/a dm_name=>n/a array_type=>local array_name=>n/a lun_id=>n/a shared=>no [1] => name=>vg2 type=>lvm lun_size=>1g mpath_name=>//dev/mapper/mpath28p1 flun_id=>60060e80166fa70000016fa700000013 dm_name=>/dev/dm-33 array_type=>r700 array_name=>ls1000 lun_id=>0013 shared=>no [2] => ....etc thanks
the solution is:
- loop through original array elements
- use
explode()function split string - store elements in (key,value) pair in temporary array
- push temporary array @ appropriate position in original array.
so code should this:
// suppose $arr original array $arrlength = count($arr); for($i = 0; $i < $arrlength; ++$i){ $component_arr = explode(" ", $arr[$i]); $tmp_arr = array(); $tmp_arr['name'] = $component_arr[0]; $tmp_arr['type'] = $component_arr[1]; $tmp_arr['lun_size'] = $component_arr[2]; $tmp_arr['mpath_name'] = $component_arr[3]; $tmp_arr['flun_id'] = $component_arr[4]; $tmp_arr['dm_name'] = $component_arr[5]; $tmp_arr['array_type'] = $component_arr[6]; $tmp_arr['array_name'] = $component_arr[7]; $tmp_arr['lun_id'] = $component_arr[8]; $tmp_arr['shared'] = $component_arr[9]; unset($arr[$i]); $arr[$i] = $tmp_arr; } // display $arr array var_dump($arr);
Comments
Post a Comment