Bir dosyaya yazdırma dizi

6 Cevap php

Ben bir dosyaya bir dizi yazdırmak istiyorum.

Ben dosya böyle bir kod nasıl göründüğünü tam gibi benzer bakmak istiyorum.

print_r ($abc); $ abc varsayarak bir dizidir.

Bu ziyade her bir görünüm için düzenli herhangi bir satır çözüm var mı.

PS - Şu anda serialize kullanabilirsiniz ama okunabilirliği tefrika diziler ile oldukça zor olduğu gibi ben dosyaları okunabilir yapmak istiyorum.

6 Cevap

var_export or set print_r yerine onu baskı çıktı dönmek ya.

Example from PHP manual

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

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

Daha sonra $results file_put_contents ile kaydedebilirsiniz. Dosyaya yazarken veya doğrudan geri:

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

Sadece kullanmak {[(0)];} ) Oku documentation:

Eğer çıkış yakalamak istiyorsanız print_r(), return parametresini kullanın. Bu parametre TRUE olarak ayarlandığında, print_r() bilgi dönmek ziyade basacaktır.

Yani bu bir olasılık:

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

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

Eğer deneyebilirsiniz:

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

Bu deneyebilirsiniz, $myArray Array olarak

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

Sadece çıktı metin olarak bir dizi için bu işlevi yazdı:

Çıkış güzel dizi biçimlendirilmiş olmalıdır.

ÖNEMLİ NOT:

Kullanıcı girişi sakının.

Bu komut iç kullanım için yaratıldı.

Eğer kamu kullanımı için kullanmak niyetinde eğer komut enjeksiyonu önlemek için bazı ek veri doğrulama eklemek gerekir.

Bu kanıt aptal değildir ve sadece güvenilir veri ile kullanılmalıdır.

Aşağıdaki fonksiyon çıktısı gibi bir şey:

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

Burada fonksiyonudur (not:. işlev henüz oop uygulanması için biçimlendirilmiş)

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

Alternatif olarak bu komut dosyasını kullanabilirsiniz Ben de bir süre önce yazdı:

Bu bir dizinin parçaları kopyalamak ve yapıştırmak için güzel.

(Tefrika çıkışı ile bunu yapmak imkansız yakın olurdu)

Değil temiz işlevi ancak bu iş bitmiş olur.

Bu bir irade çıktısı aşağıdaki gibidir:

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

Also take care for user input. Here is the 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;
  }