web-dev-qa-db-fra.com

Imprimer un tableau dans un fichier

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.

165

Soit var_export ou définissez print_r pour renvoyer la sortie au lieu de l’imprimer.

Exemple tiré du manuel PHP

_$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));
_
273
Gordon

Il suffit d'utiliser print_r; ) Lisez le documentation :

Si vous souhaitez capturer la sortie de print_r(), utilisez le paramètre return. Lorsque ce paramètre est défini sur TRUE, 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);
52
Felix Kling

file_put_contents($file, print_r($array, true), FILE_APPEND)

25
binaryLV

Tu pourrais essayer:

$h = fopen('filename.txt', 'r+');
fwrite($h, var_export($your_array, true));
22
Sarfraz

Faites ceci rapidement et simplement:

file_put_contents($filename, var_export($myArray, true));
6
alexwenzel

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);
4
Ahmad

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;
  }
4
Dieter Gribnitz

utilisez simplement file_put_contents('file',$myarray); file_put_contents () fonctionne aussi avec les tableaux.

2
Patrick Mutwiri

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);
?>
1
kamal pal

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++;
    }
1
Sumit

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);
0
vividus designs