Je voudrais imprimer un tableau dans un fichier.
Je voudrais que le fichier ressemble exactement à ce à quoi ressemble un code comme celui-ci.
print_r ($abc);
en supposant que $ abc est un tableau.
Y a-t-il une solution pour cela plutôt que régulière pour chaque look.
PS - J'utilise actuellement sérialiser mais je veux rendre les fichiers lisibles car la lisibilité est assez difficile avec les tableaux sérialisés.
php
serialization
Atif Mohammed Ameenuddin
la source
la source
implode
le tableau avecPHP_EOL
et écrivez la chaîne résultante dans le fichier.var_export
est préférable si vous souhaitez enregistrer le fichier dans la syntaxe php.print_r
revient[m] => monkey
maisvar_export
revient'm' => 'monkey'
Utilisez simplement
print_r
; ) Lisez la documentation :Voici donc une possibilité:
$fp = fopen('file.txt', 'w'); fwrite($fp, print_r($array, TRUE)); fclose($fp);
la source
file_put_contents($file, print_r($array, true), FILE_APPEND)
la source
Tu pourrais essayer:
$h = fopen('filename.txt', 'r+'); fwrite($h, var_export($your_array, true));
la source
true
paramètre de à var_export, sinon il n'y a pas de contenu à écrire dans le fichier.Faites ceci rapidement et simplement:
file_put_contents($filename, var_export($myArray, true));
la source
Vous pouvez essayer ceci,
$myArray
car le tableau$filename = "mylog.txt"; $text = ""; foreach($myArray as $key => $value) { $text .= $key." : ".$value."\n"; } $fh = fopen($filename, "w") or die("Could not open log file."); fwrite($fh, $text) or die("Could not write file!"); fclose($fh);
la source
Je viens d'écrire cette fonction pour générer un tableau sous forme de texte:
Devrait produire un tableau bien formaté.
NOTE IMPORTANTE:
Méfiez-vous des entrées de l'utilisateur.
Ce script a été créé pour un usage interne.
Si vous avez l'intention de l'utiliser pour un usage public, vous devrez ajouter une validation de données supplémentaire pour empêcher l'injection de script.
Ce n'est pas infaillible et ne doit être utilisé qu'avec des données fiables.
La fonction suivante affichera quelque chose comme:
$var = array( 'primarykey' => array( 'test' => array( 'var' => array( 1 => 99, 2 => 500, ), ), 'abc' => 'd', ), );
voici la fonction (note: la fonction est actuellement formatée pour l'implémentation oop.)
public function outArray($array, $lvl=0){ $sub = $lvl+1; $return = ""; if($lvl==null){ $return = "\t\$var = array(\n"; } foreach($array as $key => $mixed){ $key = trim($key); if(!is_array($mixed)){ $mixed = trim($mixed); } if(empty($key) && empty($mixed)){continue;} if(!is_numeric($key) && !empty($key)){ if($key == "[]"){ $key = null; } else { $key = "'".addslashes($key)."'"; } } if($mixed === null){ $mixed = 'null'; } elseif($mixed === false){ $mixed = 'false'; } elseif($mixed === true){ $mixed = 'true'; } elseif($mixed === ""){ $mixed = "''"; } //CONVERT STRINGS 'true', 'false' and 'null' TO true, false and null //uncomment if needed //elseif(!is_numeric($mixed) && !is_array($mixed) && !empty($mixed)){ // if($mixed != 'false' && $mixed != 'true' && $mixed != 'null'){ // $mixed = "'".addslashes($mixed)."'"; // } //} if(is_array($mixed)){ if($key !== null){ $return .= "\t".str_repeat("\t", $sub)."$key => array(\n"; $return .= $this->outArray($mixed, $sub); $return .= "\t".str_repeat("\t", $sub)."),\n"; } else { $return .= "\t".str_repeat("\t", $sub)."array(\n"; $return .= $this->outArray($mixed, $sub); $return .= "\t".str_repeat("\t", $sub)."),\n"; } } else { if($key !== null){ $return .= "\t".str_repeat("\t", $sub)."$key => $mixed,\n"; } else { $return .= "\t".str_repeat("\t", $sub).$mixed.",\n"; } } } if($lvl==null){ $return .= "\t);\n"; } return $return; }
Alternativement, vous pouvez utiliser ce script que j'ai également écrit il y a quelque temps:
Celui-ci est agréable pour copier et coller des parties d'un tableau.
(Ce serait presque impossible de le faire avec une sortie sérialisée)
Pas la fonction la plus propre mais elle fait le travail.
Celui-ci sortira comme suit:
$array['key']['key2'] = 'value'; $array['key']['key3'] = 'value2'; $array['x'] = 7; $array['y']['z'] = 'abc';
Faites également attention à la saisie de l'utilisateur. Voici le code.
public static function prArray($array, $path=false, $top=true) { $data = ""; $delimiter = "~~|~~"; $p = null; if(is_array($array)){ foreach($array as $key => $a){ if(!is_array($a) || empty($a)){ if(is_array($a)){ $data .= $path."['{$key}'] = array();".$delimiter; } else { $data .= $path."['{$key}'] = \"".htmlentities(addslashes($a))."\";".$delimiter; } } else { $data .= self::prArray($a, $path."['{$key}']", false); } } } if($top){ $return = ""; foreach(explode($delimiter, $data) as $value){ if(!empty($value)){ $return .= '$array'.$value."<br>"; } }; echo $return; } return $data; }
la source
il suffit d'utiliser
file_put_contents('file',$myarray);
file_put_contents () fonctionne aussi avec les tableaux.la source
Voici ce que j'ai appris au cours des 17 dernières heures qui a résolu mon problème en cherchant une solution similaire.
Ressources:
http://php.net/manual/en/language.types.array.php
Code spécifique:
// The following is okay, as it's inside a string. Constants are not looked for // within strings, so no E_NOTICE occurs here print "Hello $arr[fruit]"; // Hello apple
Ce que j'ai pris d'en haut, $ arr [fruit] peut entrer dans "" (guillemets doubles) et être accepté comme chaîne par PHP pour un traitement ultérieur.
La deuxième ressource est le code dans l'une des réponses ci-dessus:
file_put_contents($file, print_r($array, true), FILE_APPEND)
C'est la deuxième chose que je ne savais pas, FILE_APPEND.
Ce que j'essayais de réaliser, c'est d'obtenir le contenu d'un fichier, de modifier les données souhaitées et de mettre à jour le fichier avec de nouvelles données, mais après avoir supprimé les anciennes données.
Maintenant, j'ai seulement besoin de savoir comment supprimer les données du fichier avant d'ajouter des données mises à jour.
À propos des autres solutions:
Juste pour que cela puisse être utile à d'autres personnes; quand j'ai essayé var_export ou Print_r ou Serialize ou Json.Encode , j'ai soit des caractères spéciaux comme => ou; ou 'ou [] dans le fichier ou une sorte d'erreur. J'ai essayé trop de choses pour se souvenir de toutes les erreurs. Donc, si quelqu'un peut vouloir les essayer à nouveau (peut avoir un scénario différent du mien), il peut s'attendre à des erreurs.
À propos de la lecture du fichier, de l'édition et de la mise à jour:
J'ai utilisé la fonction fgets () pour charger le tableau de fichiers dans une variable ($ array) puis utiliser unset ($ array [x]) (où x représente le numéro de tableau souhaité, 1,2,3 etc.) pour supprimer un tableau particulier. Ensuite, utilisez array_values () pour réindexer et charger le tableau dans une autre variable, puis utilisez une boucle while et les solutions ci-dessus pour vider le tableau (sans aucun caractère spécial) dans le fichier cible.
$x=0; while ($x <= $lines-1) //$lines is count($array) i.e. number of lines in array $array { $txt= "$array[$x]"; file_put_contents("file.txt", $txt, FILE_APPEND); $x++; }
la source
Cependant, op doit écrire un tableau tel qu'il est sur fichier.J'ai débarqué sur cette page pour trouver une solution où je peux écrire un tableau dans un fichier et que je peux facilement le lire plus tard en utilisant à nouveau php.
J'ai trouvé une solution moi-même en utilisant json_encode afin que tout le monde cherche la même chose, voici le code:
file_put_contents('array.tmp', json_encode($array));
que de lire
$array = file_get_contents('array.tmp'); $array = json_decode($array,true);
la source
Ci-dessous devrait fonctionner correctement et plus lisible
<pre>
<?php ob_start(); echo '<pre>'; print_r($array); $outputBuffer = ob_get_contents(); ob_end_flush(); file_put_contents('your file name', $outputBuffer); ?>
la source
test.php
<?php return [ 'my_key_1'=>'1111111', 'my_key_2'=>'2222222', ];
index.php
// Read array from file $my_arr = include './test.php'; $my_arr["my_key_1"] = "3333333"; echo write_arr_to_file($my_arr, "./test.php"); /** * @param array $arr <p>array</p> * @param string $path <p>path to file</p> * example :: "./test.php" * @return bool <b>FALSE</b> occurred error * more info: about "file_put_contents" https://www.php.net/manual/ru/function.file-put-contents.php **/ function write_arr_to_file($arr, $path){ $data = "\n"; foreach ($arr as $key => $value) { $data = $data." '".$key."'=>'".$value."',\n"; } return file_put_contents($path, "<?php \nreturn [".$data."];"); }
la source