Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How create an array from the output of an array printed with print_r?

I have an array:

$a = array('foo' => 'fooMe'); 

and I do:

print_r($a); 

which prints:

Array ( [foo] => printme ) 

Is there a function, so when doing:

needed_function('    Array ( [foo] => printme )'); 

I will get the array array('foo' => 'fooMe'); back?

like image 885
John Kar. Avatar asked Aug 11 '11 12:08

John Kar.


People also ask

What is output of print_r function?

It is a built-in function in print_r in PHP that is used to print or display the contents of a variable. It essentially prints human-readable data about a variable. The value of the variable will be printed if it is a string, integer, or float.


1 Answers

I actually wrote a function that parses a "stringed array" into an actual array. Obviously, it's somewhat hacky and whatnot, but it works on my testcase. Here's a link to a functioning prototype at http://codepad.org/idlXdij3.

I'll post the code inline too, for those people that don't feel like clicking on the link:

<?php      /**       * @author ninetwozero       */ ?> <?php     //The array we begin with     $start_array = array('foo' => 'bar', 'bar' => 'foo', 'foobar' => 'barfoo');      //Convert the array to a string     $array_string = print_r($start_array, true);      //Get the new array     $end_array = text_to_array($array_string);      //Output the array!     print_r($end_array);      function text_to_array($str) {          //Initialize arrays         $keys = array();         $values = array();         $output = array();          //Is it an array?         if( substr($str, 0, 5) == 'Array' ) {              //Let's parse it (hopefully it won't clash)             $array_contents = substr($str, 7, -2);             $array_contents = str_replace(array('[', ']', '=>'), array('#!#', '#?#', ''), $array_contents);             $array_fields = explode("#!#", $array_contents);              //For each array-field, we need to explode on the delimiters I've set and make it look funny.             for($i = 0; $i < count($array_fields); $i++ ) {                  //First run is glitched, so let's pass on that one.                 if( $i != 0 ) {                      $bits = explode('#?#', $array_fields[$i]);                     if( $bits[0] != '' ) $output[$bits[0]] = $bits[1];                  }             }              //Return the output.             return $output;          } else {              //Duh, not an array.             echo 'The given parameter is not an array.';             return null;         }      } ?> 
like image 113
karllindmark Avatar answered Oct 06 '22 04:10

karllindmark