我想将数组打印到文件中。
我希望文件看起来完全像这样的代码。
print_r ($abc);
假设$ abc是一个数组。
是否有任何一种解决方案,而不是每次外观都是常规的。
PS-我目前使用序列化,但是我想使文件可读,因为使用序列化数组很难读取。
我想将数组打印到文件中。
我希望文件看起来完全像这样的代码。
print_r ($abc);
假设$ abc是一个数组。
是否有任何一种解决方案,而不是每次外观都是常规的。
PS-我目前使用序列化,但是我想使文件可读,因为使用序列化数组很难读取。
Answers:
无论是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
然后$results
,您可以使用保存file_put_contents
。或在写入文件时直接将其返回:
file_put_contents('filename.txt', print_r($b, true));
implode
使用数组PHP_EOL
并将结果字符串写入文件。
var_export
如果您想以php语法保存文件,则更好。print_r
返回[m] => monkey
但var_export
返回'm' => 'monkey'
您可以尝试:
$h = fopen('filename.txt', 'r+');
fwrite($h, var_export($your_array, true));
true
到var_export,否则没有内容可写入文件。
我只是编写了此函数以将数组输出为文本:
应该输出格式正确的数组。
重要的提示:
当心用户输入。
该脚本是为内部使用而创建的。
如果打算将其用于公共用途,则需要添加一些其他数据验证以防止脚本注入。
这并非万无一失,应仅与受信任的数据一起使用。
以下函数将输出类似:
$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;
}
只需使用file_put_contents('file',$myarray);
file_put_contents()即可处理数组。
这是我在过去17个小时中学到的,可以在寻找类似解决方案时解决了我的问题。
资源:
http://php.net/manual/zh/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_export或Print_r或Serialize或Json.Encode时,我得到了特殊字符,例如=>或; 或文件中的'或[]或某种错误。尝试了太多事情以至于无法记住所有错误。因此,如果有人可能想再次尝试(可能与我的情况不同),他们可能会遇到错误。
关于读取文件,编辑和更新:
我使用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++;
}
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."];");
}