如果你想寻求数组的帮助(例如在SO上),你需要发布数组供其他人查看。
问题是没有好的方法来输出数组,以便可以将其复制粘贴回php代码
许多用户只是转储他们的阵列,对于那些想要帮助修复阵列以便可以使用它的人来说,它变得一团糟和/或很难。
如果使用var_dump,结果将为
for i := range items {
items[i].Status = append(items[i].Status, false)
}
您最终需要删除必须删除的 string(6)等额外字符串。新项目之间缺少逗号。
Print_r解决 string(6)但它仍然缺少逗号,字符串和关联键缺失“”。
有没有什么好方法可以输出你的数组,你可以将粘贴复制到SO?
我自己已经回答了这个问题,但是如果有人有更好的方法或者知道如何让我的代码更好,那么可以随意复制并使用你需要的东西。
我认为我们有一个很好的代码,我们可以让askers使用这些代码来格式化他们的数组,而不是因为版权限制了这个帖子中的答案。
再次,请随意复制我的代码并使其更好,如果可以的话,但对于其他人来说,除非另有说明,否则正常规则适用于其他人。
预期的结果将是一个格式化的数组,您可以将其复制粘贴到PHP代码中,它将直接运行而无需任何添加或删除。
示例数组:
array(4) {
[0]=>
array(3) {
[0]=>
string(6) "string"
[1]=>
int(1)
["return"]=>
bool(true)
}
["two"]=>
array(3) {
[0]=>
string(10) "2017-10-09"
[1]=>
float(248.38)
["return"]=>
bool(false)
}
[3]=>
float(-123.4)
[4]=>
array(1) {
[0]=>
array(2) {
[0]=>
string(3) "foo"
[1]=>
array(1) {
[0]=>
string(3) "bar"
}
}
}
}
答案 0 :(得分:4)
您正在寻找var_export
。
var_export($arr);
对于您在问题开头提供的数组,输出:
array (
0 =>
array (
0 => 'string',
1 => 1,
'return' => true,
),
'two' =>
array (
0 => '2017-10-09',
1 => 248.38,
'return' => false,
),
3 => -123.40000000000001,
4 =>
array (
0 =>
array (
0 => 'foo',
1 =>
array (
0 => 'bar',
),
),
),
)
请注意已知浮点精度问题后面的次要“毛刺”。
答案 1 :(得分:-1)
这是我能做的最好的事
在我的示例数组中,有一个额外的逗号我似乎无法理解
我有一个回显键和值的函数。它在第一级缩进四个空格,每个级别增加四个空格
我使用str_pad填充空格并循环使用foreach
在此处查看此行动:https://3v4l.org/AOC0L
额外的逗号位于“bar”值之后。
$arr =Array(
0 => Array
(
0 => "string",
1 => 1,
"return" => true
),
"two" => Array
(
0 => "2017-10-09",
1 => 248.38,
"return" => false
),
3 => -123.4,
4 => array(
0 => array(
0 => "foo",
1 => array(
0 => "bar"
)
)
)
);
输出:
$arr =Array(
0 => Array
(
0 => "string",
1 => 1,
"return" => true
),
"two" => Array
(
0 => "2017-10-09",
1 => 248.38,
"return" => false
),
3 => -123.4,
4 => array(
0 => array(
0 => "foo",
1 => array(
0 => "bar"
)
)
)
);
echo "<pre>";
printArray($arr // Input array for output
, "array(" // type of output "array()" or "[]". Usage: "array(" or "["
, 1 // start padding multiplied with 4. 1 = 4 spaces indenting at start.
, false // is input a subarray. Always false when you call the function. Only function itself should change this
);
function printArray($arr, $output, $pad, $subarray){
// If it's a subarray don't indent "array" text
if($subarray){
echo str_pad("", 0, " ") . $output ."<br>\n";
}else{
echo str_pad("", $pad*4, " ") . $output ."<br>\n";
}
$i=1;
foreach($arr as $key => $item){
if(is_array($item)){
echo str_pad("", ($pad+1)*4, " ");
// add "" to key if it's associative
if(is_string($key)){
echo "\"" . $key. "\" => ";
}else{
echo $key . " => ";
}
// recrusive run printArray with padding +1 (more indenting)
printArray($item, $output, $pad+1, true);
}else{
echo str_pad("", ($pad+1)*4, " ");
// add "" to key if it's associative
if(is_string($key)){
echo "\"" . $key. "\"";
}else{
echo $key;
}
// echo item with "" if it's string, or as bool or else as numeric (float/int)
if(is_string($item)){
echo " => \"". $item ."\"";
}else if(is_bool($item)){
$bool = var_export($item,true);
echo " => ". $bool;
}else{
echo " => ". $item;
}
// if it's the last item, don't add comma to end of array
if($i == count($arr)){
echo "<br>\n";
}else{
echo ",<br>\n";
}
$i++;
}
}
// add correct closing bracket
if($output == "["){
echo str_pad("", $pad*4, " ") . "]";
}else{
echo str_pad("", $pad*4, " ") . ")";
}
// if it's the very last item add a ; instead of ,
if($pad == 1){
echo ";<br>\n";
}else{
if($i == count($arr)){
echo "<br>\n";
}else{
echo ",<br>\n";
}
}