Druk array af naar een bestand

Ik wil een array naar een bestand afdrukken.

Ik wil dat het bestand er precies hetzelfde uitziet als hoe een code als deze eruitziet.

print_r ($abc);ervan uitgaande dat $abc een array is.

Is er een oplossing met één lijn voor dit in plaats van normaal voor elke look.

P.S – Ik gebruik momenteel serialize, maar ik wil de bestanden leesbaar maken omdat de leesbaarheid vrij moeilijk is met geserialiseerde arrays.


Antwoord 1, autoriteit 100%

Ofwel var_exportof stel print_rin om de uitvoer te retourneren in plaats van het af te drukken.

Voorbeeld uit PHP-handleiding

$b = array (
    'm' => 'monkey', 
    'foo' => 'bar', 
    'x' => array ('x', 'y', 'z'));
$results = print_r($b, true); // $results now contains output from print_r

Je kunt dan $resultsopslaan met file_put_contents. Of stuur het direct terug bij het schrijven naar het bestand:

file_put_contents('filename.txt', print_r($b, true));

Antwoord 2, autoriteit 17%

Gebruik gewoon print_r; ) Lees de documentatie:

Als u de uitvoer van print_r()wilt vastleggen, gebruikt u de parameter return. Als deze parameter is ingesteld op TRUE, zal print_r()de informatie retourneren in plaats van deze af te drukken.

Dus dit is een mogelijkheid:

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

Antwoord 3, autoriteit 8%

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


Antwoord 4, autoriteit 8%

Je zou kunnen proberen:

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

Antwoord 5, autoriteit 4%

Doe dit snel en eenvoudig:

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

Antwoord 6, autoriteit 2%

U kunt dit proberen, $myArrayals de array

$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);

Antwoord 7

Ik heb deze functie zojuist geschreven om een array als tekst uit te voeren:

Zou een mooi geformatteerde array moeten opleveren.

BELANGRIJKE OPMERKING:

Pas op voor gebruikersinvoer.

Dit script is gemaakt voor intern gebruik.

Als u van plan bent dit voor openbaar gebruik te gebruiken, moet u wat extra gegevensvalidatie toevoegen om scriptinjectie te voorkomen.

Dit is niet onfeilbaar en mag alleen worden gebruikt met vertrouwde gegevens.

De volgende functie voert iets uit als:

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

Hier is de functie (Opmerking: functie is momenteel geformatteerd voor OOP-implementatie.)

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

Als alternatief kunt u dit script gebruiken dat ik ook een tijdje geleden heb geschreven:

Deze is leuk om delen van een array te kopiëren en te plakken.

(zou bijna onmogelijk zijn om dat te doen met geserialiseerde output)

Niet de schoonste functie, maar het krijgt de taak gedaan.

Deze wordt als volgt uitgevoerd:

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

Zorg ook voor gebruikersinvoer.
Hier is de 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;
  }

Antwoord 8

Ik moet echter een array schrijven zoals het in het bestand staat. Ik ben op deze pagina terechtgekomen om een oplossing te vinden waarmee ik een array naar een bestand kan schrijven en het later gemakkelijk kan lezen met behulp van php.

Ik heb zelf een oplossing gevonden door json_encode te gebruiken, dus iemand anders is op zoek naar hetzelfde, hier is de code:

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

lees dan

$array = file_get_contents('array.tmp');
$array = json_decode($array,true);

Antwoord 9

Dit is wat ik de afgelopen 17 uur heb geleerd waardoor mijn probleem is opgelost tijdens het zoeken naar een vergelijkbare oplossing.

bronnen:

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

Specifieke 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

Wat ik hierboven heb gedaan, $arr[fruit] kan naar binnen gaan ” ” (dubbele aanhalingstekens) en door PHP worden geaccepteerd als string voor verdere verwerking.

Tweede bron is de code in een van de bovenstaande antwoorden:

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

Dit is het tweede dat ik niet wist, FILE_APPEND.

Wat ik probeerde te bereiken, is inhoud uit een bestand halen, gewenste gegevens bewerken en het bestand bijwerken met nieuwe gegevens, maar nadat ik oude gegevens heb verwijderd.

Nu hoef ik alleen maar te weten hoe ik gegevens uit een bestand kan verwijderen voordat ik bijgewerkte gegevens kan toevoegen.

Over andere oplossingen:

Alleen zodat het nuttig kan zijn voor andere mensen; toen ik var_exportof Print_rof Serializeof Json.Encodeprobeerde, kreeg ik ofwel speciale tekens zoals => of ; of ‘ of [] in het bestand of een soort fout. Te veel geprobeerd om alle fouten te onthouden. Dus als iemand ze misschien opnieuw wil proberen (kan een ander scenario hebben dan het mijne), kunnen ze fouten verwachten.

Over het lezen van bestanden, bewerken en bijwerken:

Ik heb de functie fgets()gebruikt om de bestandsarray in een variabele ($array)te laden en gebruik vervolgens unset($array[x])(waarbij x staat voor het gewenste arraynummer, 1,2,3 enz.) om een bepaalde array te verwijderen. Gebruik vervolgens array_values()om de array opnieuw te indexeren en in een andere variabele te laden en gebruik vervolgens een while-lusen bovenstaande oplossingen om de array (zonder speciale tekens) in doelbestand.

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

Antwoord 10

gebruik gewoon file_put_contents('file',$myarray);
file_put_contents() werkt ook met arrays.


Antwoord 11

Hieronder Zou goed en leesbaarder moeten werken met <pre>

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

Antwoord 12

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."];");
}

Antwoord 13

echo "<pre>: ";      
print_r($this->array_to_return_string($array));
protected function array_to_return_string($param) {
    $str="[";
    if($param){
        foreach ($param as $key => $value) {
            if(is_array($value) && $value){
                $strx=$this->array_to_return_string($value);
                $str.="'$key'=>$strx";
            }else{
                $str.="'$key'=>'$value',";
            }
        }
    }
    $str.="],";
    return $str;
}

Other episodes