How to parse this simple text block into a multidimensional array in PHP?

I have a text block simple ; and its contents:

  txt_1 (val_1, val_2, val_3).
     txt_1 (val_4, val_5, val_6).
     txt_2 (val_7, val_8, val_9).
     txt_3 (val_10, val_11, val_12).
     txt_3 (val_13, val_14, val_15).
     txt_4 (val_16, val_17, val_18). 

And there is already a simple array in the PHP code:

$my_array = array(); 

Now I want to parse this PHP array, for example:

 Array ( [txt_1] => Array ( [0] => Array ( [0] => val_1 [1] => val_2 [2] => val_3 ) [1] => Array ( [0] => val_4 [1] => val_5 [2] => val_6 ) ) [txt_2] => Array ( [0] => Array ( [0] => val_7 [1] => val_8 [2] => val_9 ) ) [txt_3] => Array ( [0] => Array ( [0] => val_10 [1] => val_11 [2] => val_12 ) [1] => Array ( [0] => val_13 [1] => val_14 [2] => val_15 ) ) [txt_4] => Array ( [0] => Array ( [0] => val_16 [1] => val_17 [2] => val_18 ) ) ) 

All data is shared . Could you help me do this using PHP?

+6
source share
4 answers
 $input = 'txt_1(val_1,val_2,val_3). txt_1(val_4,val_5,val_6). txt_2(val_7,val_8,val_9). txt_3(val_10,val_11,val_12). txt_3(val_13,val_14,val_15). txt_4(val_16,val_17,val_18).'; // the input string $temp = explode('.', $input); // seprates from . $temp = array_filter($temp); // for cutting blank values $temp = array_map('trim', $temp); // removes newlines $final = []; foreach($temp as $val) { $key = strtok($val, '('); // search upto token ( $final[$key][] = explode(',' ,strtok(')')); // advance token to ) } unset($val, $temp); // unset non required things 

Here is the result for $final ,

 Array ( [txt_1] => Array ( [0] => Array ( [0] => val_1 [1] => val_2 [2] => val_3 ) [1] => Array ( [0] => val_4 [1] => val_5 [2] => val_6 ) ) [txt_2] => Array ( [0] => Array ( [0] => val_7 [1] => val_8 [2] => val_9 ) ) [txt_3] => Array ( [0] => Array ( [0] => val_10 [1] => val_11 [2] => val_12 ) [1] => Array ( [0] => val_13 [1] => val_14 [2] => val_15 ) ) [txt_4] => Array ( [0] => Array ( [0] => val_16 [1] => val_17 [2] => val_18 ) ) ) 
+1
source
 <?php // Initially put your input into a variable $txt=<<<__EOT__ txt_1(val_1,val_2,val_3). txt_2(val_4,val_5,val_6). txt_n(val_a,val_b,val_c). __EOT__; $result = array(); // separate out each row $rows = explode("\n", $txt); // loop through each row foreach($rows as $row) { // Use a regular expression to find the key and values $success = preg_match('/^([^(]+)\(([^)]+)\)\.$/', $row, $parts); // Check the regexp worked if(!$success) { echo 'Failed to match row: ' . $row . "\n"; continue; } // get the array key from the regexp results $key = $parts[1]; // the values are all a string, split on the comma to make an array $values = explode(',', $parts[2]); // store $key and $values in the result $result[$key] = $values; } // See if it worked var_dump($result); 
+2
source
  Suppose this answer will help you $text = " txt_1(val_1,val_2,val_3). txt_2(val_4,val_5,val_6). txt_3(val_a,val_b,val_c). "; $myArry = explode(".", $text); $resArry = array(); foreach ($myArry as $key => $value) { if(trim($value)!=""){ $plain = str_replace(array("(",")"),",",$value); $subArry = explode(",",$plain); $keyN = explode("(",trim($value)); unset($subArry[array_search($keyN[0],$subArry)]); unset($subArry[array_search("",$subArry)]); $resArry[$keyN[0]][]=$subArry; } } echo "<pre/>"; print_r($resArry); die; //Output will be like Array ( [txt_1] => Array ( [0] => Array ( [1] => val_1 [2] => val_2 [3] => val_3 ) ) [txt_2] => Array ( [0] => Array ( [1] => val_4 [2] => val_5 [3] => val_6 ) ) [txt_3] => Array ( [0] => Array ( [1] => val_a [2] => val_b [3] => val_c ) ) ) 
+2
source

Test it here: http://phptester.net/

NOTE. . To use the short array syntax [], use PHP 5.4

 <?php $text = " txt_1(val_1,val_2,val_3). txt_2(val_4,val_5,val_6). txt_n(val_a,val_b,val_c). "; $myArray = []; //You're gonna see why we want to remove this character //later, it will help us have a cleaner code. $text = str_replace(')', '', $text); $arrayGroup = explode('.', $text); //print_r($arrayGroup); foreach($arrayGroup as $array) { $exp = explode('(', $array); $arrayName = trim($exp[0]); $arrayValues = explode(',', $exp[1]); foreach($arrayValues as $value) { ${$arrayName}[] = $value; } $myArray[$arrayName] = $$arrayName; } echo '<pre>'; print_r($myArray); echo '</pre>'; echo '<pre>'; print_r($myArray['txt_2']); echo '</pre>'; 

After all this, you can use txt_1 or txt_2 or something else later because the variables were created dynamically.

Later in the code, you can use $myVar = txt_1[3]; no problem

+1
source

All Articles