将数组打印到文件

我想打印一个数组到一个文件。

我想这个文件看起来像这样的代码完全相似。

print_r ($abc); 假设$ abc是一个数组。

是否有任何一条线的解决scheme,而不是每个外观的常规。

PS – 我目前使用序列化,但我想使文件可读性作为可读性是相当困难的序列化数组。

无论是var_export或设置print_r返回输出,而不是打印它。

来自PHP手册的例子

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

然后,您可以使用file_put_contents保存$results 。 或者在写入文件时直接返回:

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

只需使用print_r ; )阅读文档 :

如果您想捕获print_r()的输出,请使用return参数。 当此参数设置为TRUEprint_r()将返回信息而不是打印它。

所以这是一个可能性:

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

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

你可以尝试:

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

你可以试试这个, $myArray作为数组

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

我只写了这个函数来输出一个数组作为文本:

应该输出格式良好的数组。

重要的提示:

谨防用户input。

这个脚本是为内部使用而创build的。

如果您打算将其用于公共使用,您将需要添加一些额外的数据validation,以防止脚本注入。

这不是简单的certificate,只能用于受信任的数据。

以下函数将输出如下所示的内容:

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

这里是函数(注意:函数目前被格式化为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; } 

或者你可以使用这个脚本我也写了一段时间:

这一个很好复制和粘贴数组的一部分。

(几乎不可能做到这一点与序列化输出)

不是最干净的function,但它完成了工作。

这个输出如下:

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

也照顾用户input。 这是代码。

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

快速简单的做到这一点:

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

这是我在过去17个小时里学到的知识,在寻找类似的解决scheme的时候解决了我的问题。

资源:

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

具体代码:

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

我从上面取的,$ arr [水果]可以进入“”(双引号),并被PHP接受为string进一步处理。

第二个资源是以上答案之一的代码:

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

这是我不知道的第二件事,FILE_APPEND。

我试图实现的是从文件中获取内容,编辑所需数据,并用新数据更新文件,但在删除旧数据之后。

现在我只需要知道如何在添加更新的数据之前从文件中删除数据。

关于其他解决scheme

只是为了对其他人有所帮助; 当我尝试var_exportPrint_r序列化Json.Encode时 ,我得到了特殊字符,如=>或; 或'或[]在文件中或某种错误。 尝试了太多的东西来记住所有的错误。 所以如果有人可能想再试一次(可能与我的情况不同),他们可能会有错误。

关于阅读文件,编辑和更新:

我用fgets()函数来加载文件数组到一个variables($数组) ,然后使用unset($ array [x]) (其中x代表所需的数组编号,1,2,3等)删除特定的数组。 然后使用array_values()重新索引并将数组加载到另一个variables中,然后使用while循环和上述解决scheme将数组(不带任何特殊字符)转储到目标文件中。

 $x=0; while ($x <= $lines-1) //$lines is count($array) ie number of lines in array $array { $txt= "$array[$x]"; file_put_contents("file.txt", $txt, FILE_APPEND); $x++; } 

下面应该使用<pre>工作更好,更易读

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

只需使用file_put_contents('file',$myarray); file_put_contents()也适用于数组。