我想将数组打印到文件中。
我希望该文件与这样的代码看起来完全相似。
print_r ($abc);
假设$ abc是一个数组。
对于每种外观,是否有任何一种解决方案而不是常规解决方案。
P.S - 我目前使用序列化但我想使文件可读,因为序列化数组的可读性非常难。
答案 0 :(得分:269)
var_export
或设置print_r
以返回输出而不是打印输出。
$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));
答案 1 :(得分:50)
只需使用print_r
; )阅读documentation:
如果您想捕获
print_r()
的输出,请使用return
参数。当此参数设置为TRUE
时,print_r()
将返回信息而不是打印信息。
所以这是一种可能性:
$fp = fopen('file.txt', 'w');
fwrite($fp, print_r($array, TRUE));
fclose($fp);
答案 2 :(得分:25)
file_put_contents($file, print_r($array, true), FILE_APPEND)
答案 3 :(得分:22)
你可以尝试:
$h = fopen('filename.txt', 'r+');
fwrite($h, var_export($your_array, true));
答案 4 :(得分:5)
快速而简单地执行此操作:
file_put_contents($filename, var_export($myArray, true));
答案 5 :(得分:4)
你可以试试这个,$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);
答案 6 :(得分:4)
我刚写了这个函数来输出一个数组作为文本:
应输出格式良好的数组。
重要提示:
小心用户输入。
此脚本是为内部使用而创建的。
如果您打算将其用于公共用途,则需要添加一些额外的数据验证以防止脚本注入。
这不是万无一失的,只能与可信数据一起使用。
以下函数将输出如下内容:
$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;
}
或者你可以使用我之前写过的这个脚本:
这个很好地复制和粘贴数组的部分。
(使用序列化输出几乎不可能做到这一点)
不是最干净的功能,但它完成了工作。
这个输出如下:
$array['key']['key2'] = 'value';
$array['key']['key3'] = 'value2';
$array['x'] = 7;
$array['y']['z'] = 'abc';
还要注意用户输入。 这是代码。
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;
}
答案 7 :(得分:1)
以下是我在过去17小时内学到的内容,它在搜索类似解决方案时解决了我的问题。
资源:
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 [fruit]可以进去&#34; &#34; (双引号)并由PHP接受为进一步处理。
第二个资源是上述答案之一中的代码:
file_put_contents($file, print_r($array, true), FILE_APPEND)
这是我不知道的第二件事,FILE_APPEND。
我想要实现的是从文件中获取内容,编辑所需数据并使用新数据更新文件,但删除旧数据后。
现在我只需要知道在添加更新数据之前如何从文件中删除数据。
关于其他解决方案:
这样可能对其他人有帮助;当我尝试 var_export 或 Print_r 或序列化或 Json.Encode 时,我会得到像=&gt;这样的特殊字符。要么 ;或者&#39;或[]在文件中或某种错误。试过太多东西来记住所有的错误。因此,如果有人可能想再次尝试它们(可能有不同于我的情景),他们可能会遇到错误。
关于阅读文件,编辑和更新:
我使用 fgets()函数将文件数组加载到变量($ array)中,然后使用 unset($ array [x])(其中x代表所需的数组编号,1,2,3等)以删除特定的数组。然后使用 array_values()重新索引并将数组加载到另一个变量中,然后使用 while循环和上面的解决方案将数组(没有任何特殊字符)转储到目标文件。
$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++;
}
答案 8 :(得分:1)
下面应该使用<pre>
<?php
ob_start();
echo '<pre>';
print_r($array);
$outputBuffer = ob_get_contents();
ob_end_flush();
file_put_contents('your file name', $outputBuffer);
?>
答案 9 :(得分:1)
只需使用file_put_contents('file',$myarray);
file_put_contents()也适用于数组。
答案 10 :(得分:0)
但是op需要像写文件一样写数组,因此我登陆了此页面以找到一种解决方案,可以在其中向文件写数组,并且以后可以轻松地再次使用php进行读取。
我已经通过使用json_encode找到了解决方案,所以其他人也在寻找相同的代码:
file_put_contents('array.tmp', json_encode($array));
比阅读
$array = file_get_contents('array.tmp');
$array = json_decode($array,true);
答案 11 :(得分:0)
test.php
:minute
index.php
pp_nal[x].payload
答案 12 :(得分:0)
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;
}