배열을 파일로 인쇄하고 싶습니다.
파일이 이와 비슷한 모양과 정확히 똑같이 보이기를 원합니다.
print_r ($abc);
$ abc가 배열이라고 가정합니다.
각 모양마다 규칙적인 것이 아니라 하나의 라인 솔루션이 있습니까?
추신-현재 직렬화를 사용하고 있지만 직렬화 된 배열에서는 가독성이 매우 어렵 기 때문에 파일을 읽을 수있게하고 싶습니다.
답변
하나 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));
답변
그냥 사용하십시오 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));
답변
빠르고 간단한 작업 :
file_put_contents($filename, var_export($myArray, 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);
답변
방금 텍스트로 배열을 출력하기 위해이 함수를 작성했습니다.
좋은 형식의 배열을 출력해야합니다.
중요 사항:
사용자 입력에주의하십시오.
이 스크립트는 내부 용으로 작성되었습니다.
공용으로 사용하려는 경우 스크립트 삽입을 방지하기 위해 추가 데이터 유효성 검사를 추가해야합니다.
이것은 확실한 증거가 아니며 신뢰할 수있는 데이터에만 사용해야합니다.
다음 함수는 다음과 같이 출력됩니다 :
$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;
}