J'ai écrit une fonction qui analyse un "stringed array" en un tableau réel. Évidemment, c'est un peu bricolé et tout ça, mais ça fonctionne sur mon testcase. Voici un lien vers un prototype fonctionnel à l'adresse suivante http://codepad.org/idlXdij3 .
Je vais également afficher le code en ligne, pour les personnes qui n'ont pas envie de cliquer sur le lien :
<?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;
}
}
?>
0 votes
Afin d'ajouter un contexte supplémentaire au "pourquoi", j'ai rencontré ce même problème. Un développeur précédent a laissé derrière lui un code qui analysait les données d'une autre plateforme et enregistrait les résultats sous forme de chaînes print_r (parce qu'elles étaient faciles à lire). Quelque temps plus tard, le besoin de ré-analyser ces informations s'est fait sentir, et la seule trace en était les journaux.
0 votes
Vous pouvez regarder ici : blog.nixarsoft.com/2021/04/16/convert-print_r-result-to-json
0 votes
@kodmanyagha cette page ne traite pas les sous-réseaux (besoin d'un appel récursif lors d'une réunion
Array(
), ni avec des cas particuliers. Quoi qu'il en soit, le résultat de print_r() est non-déterministe car la clé/valeur peut contenir les séparateurs utilisés par imprimer_r o\n
et rien ne nous échappe...