如何导出 PHP 数组,其中每个键值对都在单独的行中?
How to export PHP array where each key-value pair is in separate line?
我正在寻找与 var_export()
等效的功能,它允许我将 PHP 数组导出为可解析的代码,但每个语句都应打印在单独的行中(因此每一行都有自己独立的结构)。
目前这个代码:
<?php
$a = array (1, 2, array ("a", "b", "c"));
var_export($a);
?>
将输出:
array (
0 => 1,
1 => 2,
2 =>
array (
0 => 'a',
1 => 'b',
2 => 'c',
),
)
但是我希望输出为以下格式,例如:
$foo = array()
$foo['0'] = 1
$foo['1'] = 2
$foo['2'] = array();
$foo['2']['0'] = 'a';
$foo['2']['1'] = 'b';
$foo['2']['2'] = 'c';
所以执行它会产生相同的原始数组。
目标是以人类可理解的格式管理非常大的数组,这样您就可以轻松地通过复制和粘贴方法(其中每行包含元素的完整路径)取消设置某些选定的项目。通常当你在屏幕上转储非常大的数组时,问题是你必须继续向上滚动很长时间才能找到它的父级的父级并且几乎不可能找出哪个元素属于哪个以及它们的完整路径是什么而不浪费很多时间。
目前我有 found here(由 ravenswd 发布)这个简单的函数可以实现:
function recursive_print ($varname, $varval) {
if (! is_array($varval)):
print $varname . ' = ' . var_export($varval, true) . ";<br>\n";
else:
print $varname . " = array();<br>\n";
foreach ($varval as $key => $val):
recursive_print ($varname . "[" . var_export($key, true) . "]", $val);
endforeach;
endif;
}
recursive_print('$a', $a);
的输出:
$a = array();
$a[0] = 1;
$a[1] = 2;
$a[2] = array();
$a[2][0] = 'a';
$a[2][1] = 'b';
$a[2][2] = 'c';
您可以使用 json_encode
的简单解决方案,如下所示。
<?php
$arrayA = array (1, 2, array ("a", "b", "c"));
$arrayString=json_encode($a);
$arrayB=json_decode($arrayString);
?>
在这里,您所要做的就是使用 json_encode
将数组编码为 json(这将 return 一个字符串)。然后,您可以将生成的字符串存储在您想要的任何位置。
当您读回该字符串时,您必须调用 json_decode
才能获得原始 php 数组。
希望这是您想要实现的简单解决方案。
试试这个方法:
<?php
$sweet = array('a' => 'apple', 'b' => 'banana');
$fruits = array('sweet' => $sweet, 'sour' => 'lemon');
function print_item($item, $key){
echo "$key contains $item\n";
}
array_walk_recursive($fruits, 'print_item');
?>
数组遍历递归函数,将任何函数应用于数组中的所有元素。
干杯!
-奥拉洛
我正在寻找与 var_export()
等效的功能,它允许我将 PHP 数组导出为可解析的代码,但每个语句都应打印在单独的行中(因此每一行都有自己独立的结构)。
目前这个代码:
<?php
$a = array (1, 2, array ("a", "b", "c"));
var_export($a);
?>
将输出:
array (
0 => 1,
1 => 2,
2 =>
array (
0 => 'a',
1 => 'b',
2 => 'c',
),
)
但是我希望输出为以下格式,例如:
$foo = array()
$foo['0'] = 1
$foo['1'] = 2
$foo['2'] = array();
$foo['2']['0'] = 'a';
$foo['2']['1'] = 'b';
$foo['2']['2'] = 'c';
所以执行它会产生相同的原始数组。
目标是以人类可理解的格式管理非常大的数组,这样您就可以轻松地通过复制和粘贴方法(其中每行包含元素的完整路径)取消设置某些选定的项目。通常当你在屏幕上转储非常大的数组时,问题是你必须继续向上滚动很长时间才能找到它的父级的父级并且几乎不可能找出哪个元素属于哪个以及它们的完整路径是什么而不浪费很多时间。
目前我有 found here(由 ravenswd 发布)这个简单的函数可以实现:
function recursive_print ($varname, $varval) {
if (! is_array($varval)):
print $varname . ' = ' . var_export($varval, true) . ";<br>\n";
else:
print $varname . " = array();<br>\n";
foreach ($varval as $key => $val):
recursive_print ($varname . "[" . var_export($key, true) . "]", $val);
endforeach;
endif;
}
recursive_print('$a', $a);
的输出:
$a = array();
$a[0] = 1;
$a[1] = 2;
$a[2] = array();
$a[2][0] = 'a';
$a[2][1] = 'b';
$a[2][2] = 'c';
您可以使用 json_encode
的简单解决方案,如下所示。
<?php
$arrayA = array (1, 2, array ("a", "b", "c"));
$arrayString=json_encode($a);
$arrayB=json_decode($arrayString);
?>
在这里,您所要做的就是使用 json_encode
将数组编码为 json(这将 return 一个字符串)。然后,您可以将生成的字符串存储在您想要的任何位置。
当您读回该字符串时,您必须调用 json_decode
才能获得原始 php 数组。
希望这是您想要实现的简单解决方案。
试试这个方法:
<?php
$sweet = array('a' => 'apple', 'b' => 'banana');
$fruits = array('sweet' => $sweet, 'sour' => 'lemon');
function print_item($item, $key){
echo "$key contains $item\n";
}
array_walk_recursive($fruits, 'print_item');
?>
数组遍历递归函数,将任何函数应用于数组中的所有元素。
干杯!
-奥拉洛