将数组打印到文件中

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

我希望这个文件看起来和这样的代码完全相似。

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

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

p.s. -我目前使用序列化,但我想使文件可读的可读性是相当难与序列化数组。

412824 次浏览

你可以试试:

$h = fopen('filename.txt', 'r+');
fwrite($h, var_export($your_array, 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)

你可以试试这个,$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);

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

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

重要提示:

小心用户输入。

此脚本是为内部使用而创建的。

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

这不是傻瓜的证明,应该只用于可信的数据。

下面的函数将输出如下内容:

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

下面是我在过去的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]可以进入“”(双引号),并被PHP接受为字符串进行进一步处理。

第二个资源是上面其中一个答案中的代码:

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

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

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

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

关于其他解决方案:

只是为了对其他人有帮助;当我尝试var_exportPrint_r序列化Json。编码时,我要么得到特殊字符=>或;或者文件中的'或[],或者某种错误。尝试了太多的事情,记住了所有的错误。因此,如果有人想再次尝试(可能会有与我不同的场景),他们可能会预料到错误。

关于文件读取、编辑和更新:

我使用fgets ()函数将文件数组加载到变量(数组)中,然后使用设置数组($ [x])(其中x代表所需的数组号,1,2,3等)来删除特定的数组。然后使用元素()重新索引数组并将其加载到另一个变量中,然后使用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++;
}

使用<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($filename, var_export($myArray, true));

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

然而,op需要写数组,因为它是在文件上,我已经登陆了这个页面,找到一个解决方案,我可以写一个数组文件,比可以很容易地读取以后再次使用php。

我已经通过使用json_encode找到了我自己的解决方案,所以其他人都在寻找相同的代码:

file_put_contents('array.tmp', json_encode($array));

比读

$array = file_get_contents('array.tmp');
$array = json_decode($array,true);

test.php

<?php
return [
'my_key_1'=>'1111111',
'my_key_2'=>'2222222',
];

index . php

// Read array from file
$my_arr = include './test.php';


$my_arr["my_key_1"] = "3333333";


echo write_arr_to_file($my_arr, "./test.php");


/**
* @param array $arr <p>array</p>
* @param string $path <p>path to file</p>
* example :: "./test.php"
* @return bool <b>FALSE</b> occurred error
* more info: about "file_put_contents" https://www.php.net/manual/ru/function.file-put-contents.php
**/
function write_arr_to_file($arr, $path){
$data = "\n";
foreach ($arr as $key => $value) {
$data = $data."   '".$key."'=>'".$value."',\n";
}
return file_put_contents($path, "<?php  \nreturn [".$data."];");
}
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;
}

##首先您可以保存文件到一个文件

file_put_contents($target_directory. $filename, '<?php ' . PHP_EOL . ' $' . $array_name. '= ' . var_export($array, true) . ';');

那么你可以通过包含它或使用file_get_content读取这个文件。

.

.

.
file_put_contents($file_name, ' ' . PHP_EOL . ' $' . $array_name. '= ' . var_export($array, true) . ';', FILE_APPEND);

通过这种方式,您可以向前一个文件添加数据,保护文件中的数据,并随时调用它。