【问题标题】:Print nested PHP array as $var['key']['key']['key'] = value;将嵌套的 PHP 数组打印为 $var['key']['key']['key'] = value;
【发布时间】:2011-11-17 16:55:42
【问题描述】:

需要将一些设置写入(使用 fwrite())格式的 php 文件中:

$var['key']['key']['key'] = false; // bool
$var['key']['key'] = 'string'; // string
$var['key'] = 1; // numeric

为此有嵌套的 php 数组

代码将覆盖上面在文件中定义的一些值,在我的情况下 Var_export() 没用。

有什么好的解决方案吗?

【问题讨论】:

  • $string = var_export($var, true) 不起作用?
  • 为什么var_export 没用?你能描述一下你还想做什么吗?
  • 您能否详细说明您想要实现的输出?也许提供一些例子?

标签: php arrays nested


【解决方案1】:

我之前answered this question in Perl — 我想我可以将答案的要点移植到 PHP:

function dump_array_recursive ( $prefix, $var ) {
    if ( is_array( $var ) && !empty( $var ) ) {
        foreach ($var as $key => $val) {
            $prefix_key = $prefix . "[" . var_export( $key, true ) . "]";
            dump_array_recursive( $prefix_key, $val );
        }
    } else {
        echo "$prefix = " . var_export( $var, true ) . ";\n";
    }
}

// example call:
dump_array_recursive( '$foo', $foo );

这比 Perl 版本简单一点,因为 PHP 只有一种数组类型,无需担心标量引用。我也决定不尝试收集输出,而只是使用echo;如果需要,您可以将其替换为 fwrite(),或者仅使用输出缓冲来捕获字符串中的结果。

附言。请注意,虽然此函数的输出通常包含每个值的一行,但这不能保证:var_export() 的输出可能包含换行符,这些换行符将被传递到输出。我发现触发这种行为的两种情况包括带有换行符的数组键和空数组,由于某种原因,它们被导出为"array (\n)" 而不仅仅是"array()"

【讨论】:

  • Ilmari Karonen:伟大的,这就是我要找的!';
  • supposed 在每个字符串赋值的末尾都有一个'; — 这就是终止字符串和语句的原因。你是说';s 的数量比应该的多吗?如果是这样,你能告诉我导致这种情况的输入吗?
  • 嗯,这只是一个疯狂的猜测,但也许$var['config']['spinEffect']['enabled'] 的值确实是'false;'
  • 我的错,我忽略了源代码中的分号。抱歉,再次感谢您的帮助!
  • 是的,确切地说:ob_start(); dump_array_recursive('$foo', $foo); $output = ob_get_clean();
猜你喜欢
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
相关资源
最近更新 更多