将数组打印到文件
我想打印一个数组到一个文件。
我想这个文件看起来像这样的代码完全相似。
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
参数。 当此参数设置为TRUE
,print_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_export或Print_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()也适用于数组。