Je voudrais imprimer un tableau dans un fichier.
Je voudrais que le fichier ressemble exactement à un code tel que celui-ci.
print_r ($abc);
en supposant que $ abc est un tableau.
Y at-il une solution d'une ligne pour cela plutôt que régulière pour chaque look.
P.S - J'utilise actuellement sérialiser mais je veux rendre les fichiers lisibles car la lisibilité est assez difficile avec les tableaux sérialisés.
Soit var_export
ou définissez print_r
pour renvoyer la sortie au lieu de l’imprimer.
_$b = array (
'm' => 'monkey',
'foo' => 'bar',
'x' => array ('x', 'y', 'z'));
$results = print_r($b, true); // $results now contains output from print_r
_
Vous pouvez ensuite enregistrer _$results
_ avec file_put_contents
. Ou retournez-le directement lorsque vous écrivez dans le fichier:
_file_put_contents('filename.txt', print_r($b, true));
_
Il suffit d'utiliser print_r
; ) Lisez le documentation :
Si vous souhaitez capturer la sortie de
print_r()
, utilisez le paramètrereturn
. Lorsque ce paramètre est défini surTRUE
,print_r()
renvoie les informations plutôt que de les imprimer.
C'est donc une possibilité:
$fp = fopen('file.txt', 'w');
fwrite($fp, print_r($array, TRUE));
fclose($fp);
file_put_contents($file, print_r($array, true), FILE_APPEND)
Tu pourrais essayer:
$h = fopen('filename.txt', 'r+');
fwrite($h, var_export($your_array, true));
Faites ceci rapidement et simplement:
file_put_contents($filename, var_export($myArray, true));
Vous pouvez essayer ceci, $myArray
en tant que 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);
Je viens d'écrire cette fonction pour générer un tableau sous forme de texte:
Devrait sortir un tableau bien formaté.
NOTE IMPORTANTE:
Attention aux 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 des données de validation supplémentaires pour empêcher l'injection de script.
Ce n'est pas infaillible et doit être utilisé uniquement avec des données sécurisées.
La fonction suivante produira 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 une 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 aussi écrit il y a longtemps:
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)
Ce n'est pas la fonction la plus propre, mais le travail est fait.
Celui-ci sortira comme suit:
$array['key']['key2'] = 'value';
$array['key']['key3'] = 'value2';
$array['x'] = 7;
$array['y']['z'] = 'abc';
Veillez également à 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;
}
utilisez simplement file_put_contents('file',$myarray);
file_put_contents () fonctionne aussi avec les tableaux.
Ci-dessous Devrait fonctionner Bien et plus lisible avec <pre>
<?php
ob_start();
echo '<pre>';
print_r($array);
$outputBuffer = ob_get_contents();
ob_end_flush();
file_put_contents('your file name', $outputBuffer);
?>
Voici ce que j'ai appris au cours des 17 dernières heures, qui a résolu mon problème tout 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 aller entre "" (guillemets) et être accepté comme chaîne par PHP pour un traitement ultérieur.
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 faire, c’est d’obtenir le contenu d’un fichier, d’éditer les données souhaitées et de mettre à jour le fichier avec les nouvelles données, mais après avoir supprimé les anciennes.
Maintenant, j'ai seulement besoin de savoir comment supprimer des données d'un fichier avant d'ajouter des données mises à jour.
À propos d'autres solutions:
Juste pour que cela puisse aider d'autres personnes; quand j'ai essayé var_export ou Print_r ou Sérialiser 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 me souvenir de toutes les erreurs. Donc, si quelqu'un peut vouloir les réessayer (le scénario peut être différent de celui que j'ai), ils peuvent s'attendre à des erreurs.
À propos de la lecture, de la modification et de la mise à jour d'un fichier:
J'ai utilisé la fonction fgets () pour charger un 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. Puis utilisez array_values () pour réindexer et charger le tableau dans une autre variable, puis utilisez un boucle While et les solutions précédentes pour dump 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++;
}
Cependant, op doit écrire tableau comme il est dans le fichier. J'ai atterri sur cette page pour trouver une solution permettant d'écrire un tableau dans un fichier et de le lire facilement plus tard, en utilisant à nouveau php.
J'ai trouvé la solution 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 lire
$array = file_get_contents('array.tmp');
$array = json_decode($array,true);