Array in eine Datei drucken

180

Ich möchte ein Array in eine Datei drucken.

Ich möchte, dass die Datei genau so aussieht, wie ein Code wie dieser aussieht.

print_r ($abc); Angenommen, $ abc ist ein Array.

Gibt es eine einzeilige Lösung dafür und keine reguläre für jeden Look?

PS - Ich verwende derzeit Serialize, möchte aber die Dateien lesbar machen, da die Lesbarkeit mit serialisierten Arrays ziemlich schwierig ist.

Atif Mohammed Ameenuddin
quelle

Antworten:

308

Entweder var_exportoder so eingestellt print_r, dass die Ausgabe zurückgegeben wird, anstatt sie zu drucken.

Beispiel aus dem PHP-Handbuch

$b = array (
    'm' => 'monkey', 
    'foo' => 'bar', 
    'x' => array ('x', 'y', 'z'));

$results = print_r($b, true); // $results now contains output from print_r

Sie können dann speichern $resultsmit file_put_contents. Oder geben Sie es direkt zurück, wenn Sie in eine Datei schreiben:

file_put_contents('filename.txt', print_r($b, true));
Gordon
quelle
Wie können Sie NUR den Inhalt des Arrays und nicht das gesamte Array "[0] => blah" speichern?
user1899415
14
@ user1899415 implodedas Array mit PHP_EOLund schreiben Sie die resultierende Zeichenfolge in die Datei.
Gordon
13
var_exportist besser, wenn Sie die Datei in PHP-Syntax speichern möchten. print_rkehrt zurück, kehrt [m] => monkeyaber var_exportzurück'm' => 'monkey'
Pedram Behroozi
1
@Wold yes, aktivieren Sie die Option $ flags in file_put_contents.
Gordon
5
@ Verwenden Sie für dieses Beispiel FILE_APPEND : file_put_contents ('filename.txt', print_r ($ b, true), FILE_APPEND); Sie werden am Ende der Datei hinzugefügt, ohne jedes Mal zu überschreiben. Außerdem können Sie es ändern in: print_r ($ b, true). "\ n" , um einen zusätzlichen Zeilenumbruch oder eine neue Zeile hinzuzufügen.
Tarik
53

Verwenden Sie einfach print_r; ) Lesen Sie die Dokumentation :

Wenn Sie die Ausgabe von erfassen möchten print_r(), verwenden Sie den returnParameter. Wenn dieser Parameter auf eingestellt ist TRUE, print_r() werden die Informationen zurückgegeben, anstatt sie zu drucken.

Das ist also eine Möglichkeit:

$fp = fopen('file.txt', 'w');
fwrite($fp, print_r($array, TRUE));
fclose($fp);
Felix Kling
quelle
26

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

binaryLV
quelle
25

Du könntest es versuchen:

$h = fopen('filename.txt', 'r+');
fwrite($h, var_export($your_array, true));
Sarfraz
quelle
Fügen Sie den zweiten Parameter von truezu var_export hinzu, da sonst kein Inhalt zum Schreiben in die Datei vorhanden ist.
Progrock
var_export war meiner Erfahrung nach eine bessere Lösung, da es die Array-Variable in Anführungszeichen setzt, damit es besser
funktioniert,
8

Schnell und einfach:

file_put_contents($filename, var_export($myArray, true));
alexwenzel
quelle
4

Sie können dies $myArrayals Array versuchen

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

Ich habe gerade diese Funktion geschrieben, um ein Array als Text auszugeben:

Sollte ein gut formatiertes Array ausgeben.

WICHTIGE NOTIZ:

Vorsicht vor Benutzereingaben.

Dieses Skript wurde für den internen Gebrauch erstellt.

Wenn Sie dies für den öffentlichen Gebrauch verwenden möchten, müssen Sie eine zusätzliche Datenüberprüfung hinzufügen, um das Einfügen von Skripten zu verhindern.

Dies ist nicht narrensicher und sollte nur mit vertrauenswürdigen Daten verwendet werden.

Die folgende Funktion gibt ungefähr Folgendes aus:

$var = array(
  'primarykey' => array(
    'test' => array(
      'var' => array(
        1 => 99,
        2 => 500,
      ),
    ),
    'abc' => 'd',
  ),
);

Hier ist die Funktion (Hinweis: Die Funktion ist derzeit für die oop-Implementierung formatiert.)

  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;
  }

Alternativ können Sie dieses Skript verwenden, das ich vor einiger Zeit auch geschrieben habe:

Dieser ist schön, um Teile eines Arrays zu kopieren und einzufügen.

(Mit serialisierter Ausgabe wäre dies nahezu unmöglich.)

Nicht die sauberste Funktion, aber sie erledigt den Job.

Dieser wird wie folgt ausgegeben:

$array['key']['key2'] = 'value';
$array['key']['key3'] = 'value2';
$array['x'] = 7;
$array['y']['z'] = 'abc';

Achten Sie auch auf Benutzereingaben. Hier ist der 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;
  }
Dieter Gribnitz
quelle
1
Soweit ich weiß, gibt print_r die Daten nicht in einem Format aus, das als funktionierender PHP-Code kopiert und eingefügt werden kann. Dadurch wird die Ausgabe so formatiert, dass sie als funktionierendes Array kopiert und eingefügt werden kann.
Dieter Gribnitz
2

Verwenden file_put_contents('file',$myarray); Sie einfach file_put_contents (). Funktioniert auch mit Arrays.

Patrick Mutwiri
quelle
2
Dies sollte meiner Meinung nach wirklich die akzeptierte Antwort sein, obwohl es erwähnenswert ist, dass file_put_contents nur mit einem einzigen Array für das zweite Argument arbeiten kann.
user3610279
1

Folgendes habe ich in den letzten 17 Stunden gelernt, um mein Problem bei der Suche nach einer ähnlichen Lösung zu lösen.

Ressourcen:

http://php.net/manual/en/language.types.array.php

Spezifischer Code:

// 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

Was ich von oben genommen habe, $ arr [obst] kann in "" (doppelte Anführungszeichen) gehen und von PHP als String zur weiteren Verarbeitung akzeptiert werden.

Die zweite Ressource ist der Code in einer der obigen Antworten:

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

Dies ist das zweite, was ich nicht wusste, FILE_APPEND.

Ich habe versucht, Inhalte aus einer Datei abzurufen, die gewünschten Daten zu bearbeiten und die Datei mit neuen Daten zu aktualisieren, jedoch nach dem Löschen alter Daten.

Jetzt muss ich nur noch wissen, wie man Daten aus einer Datei löscht, bevor ich aktualisierte Daten hinzufüge.

Über andere Lösungen:

Nur damit es für andere Menschen hilfreich sein kann; Als ich var_export oder Print_r oder Serialize oder Json.Encode ausprobierte , bekam ich entweder Sonderzeichen wie => oder; oder 'oder [] in der Datei oder eine Art Fehler. Versuchte zu viele Dinge, um sich an alle Fehler zu erinnern. Wenn jemand sie erneut versuchen möchte (möglicherweise ein anderes Szenario als meins), kann er Fehler erwarten.

Informationen zum Lesen, Bearbeiten und Aktualisieren von Dateien:

Ich habe die Funktion fgets () verwendet, um ein Datei-Array in eine Variable ($ array) zu laden, und dann unset ($ array [x]) (wobei x für die gewünschte Array-Nummer, 1,2,3 usw. steht) verwendet, um ein bestimmtes Array zu entfernen. Verwenden Sie dann array_values ​​() , um das Array neu zu indizieren und in eine andere Variable zu laden, und verwenden Sie dann eine while-Schleife und höhere Lösungen, um das Array (ohne Sonderzeichen) in die Zieldatei zu kopieren.

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

Unten Sollte gut und besser lesbar funktionieren <pre>

<?php 

ob_start();
echo '<pre>';
print_r($array);
$outputBuffer = ob_get_contents();
ob_end_flush();
file_put_contents('your file name', $outputBuffer);
?>
Kamal Kumpel
quelle
1

Allerdings muss op ein Array schreiben, wie es in der Datei ist. Ich habe diese Seite gelandet, um eine Lösung zu finden, bei der ich ein Array in eine Datei schreiben und später mit PHP leicht wieder lesen kann.

Ich habe selbst eine Lösung gefunden, indem ich json_encode verwendet habe, sodass jeder andere hier nach dem gleichen Code sucht:

file_put_contents('array.tmp', json_encode($array));

als lesen

$array = file_get_contents('array.tmp');
$array = json_decode($array,true);
Vividus Designs
quelle
0

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."];");
}
Юрий Светлов
quelle