Domanda Stampa la matrice su un file


Vorrei stampare una matrice su un file.

Vorrei che il file assomigliasse esattamente a come appare un codice come questo.

print_r ($abc); supponendo che $ abc sia un array.

Esiste una soluzione a linee piuttosto che regolare per ogni look.

P.S - Attualmente utilizzo la serializzazione ma voglio rendere leggibili i file poiché la leggibilità è piuttosto difficile con gli array serializzati.


142
2018-04-13 10:34


origine


risposte:


O var_export o set print_r per restituire l'output anziché stamparlo.

Esempio dal manuale PHP

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

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

Puoi quindi salvare $results con file_put_contents. Oppure restituiscilo direttamente quando scrivi sul file:

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

252
2018-04-13 10:36



Basta usare print_r ; ) Leggi il documentazione:

Se si desidera acquisire l'output di print_r(), Usa il return parametro. Quando questo parametro è impostato su TRUE, print_r()  restituirà le informazioni anziché stamparle.

Quindi questa è una possibilità:

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

44
2018-04-13 10:38



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


23
2018-04-13 10:40



Potresti provare:

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

18
2018-04-13 10:38



Veloce e semplice fai questo:

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

5
2018-06-04 15:57



Puoi provare questo, $myArray come la matrice

$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
2017-10-05 06:03



Ho appena scritto questa funzione per generare un array come testo:

Dovrebbe produrre un array ben formattato.

NOTA IMPORTANTE:

Attenzione all'input dell'utente.

Questo script è stato creato per uso interno.

Se si intende utilizzare questo per uso pubblico, sarà necessario aggiungere ulteriori convalide dei dati per evitare l'inserimento di script.

Questo non è infallibile e dovrebbe essere usato solo con dati attendibili.

La seguente funzione mostrerà qualcosa come:

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

ecco la funzione (nota: la funzione è attualmente formattata per l'implementazione di 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;
  }

In alternativa puoi usare questo script che ho scritto anche qualche tempo fa:

Questo è bello per copiare e incollare parti di un array.

(Sarebbe quasi impossibile farlo con l'output serializzato)

Non è la funzione più pulita ma svolge il lavoro.

Questo uscirà come segue:

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

Presta inoltre attenzione all'input dell'utente. Ecco il codice.

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
2018-04-15 19:12