如何将PHP数组格式化为字符串

3

I have this php array:

$items = array (
    "Item 1" => "Value 1",
    "Item 2" => "Value 2",
    "Item 3" => "Value 3"
);

我在想是否有一种优雅的PHP函数可以完成与此相同的操作:

$output = "";
foreach ( $items as $key => $value ) {
    $output .= sprintf( "%s: %s\n" , $key , $value );
}
echo $output;

当然,这将输出:
Item 1: Value 1
Item 2: Value 2
Item 3: Value 3

此外,你如何称呼这个过程?反序列化吗?

4
你需要类似于 var_dumpprint_r 这样的东西吗? - Can Geliş
3
每次你重新赋值$output到当前值时,这并不能输出你想要的结果。 - cheesemacfly
有一些脚本可以格式化print_r,但是你也可以像上面那样做,我觉得看起来很好。 - user557846
2
应该用“.=”吧?所以:$output .= sprintf(); - borazslo
另外vfprintf()也是如此,但PHP在任何方面都很差,包括流逻辑,在将流转换为变量的方法上我还没有找到。 - Ondra Žižka
显示剩余8条评论
2个回答

7

您可以使用array_walk函数进行操作。以下是示例代码:

function test_print($value, $key) {
    echo sprintf( "%s: %s\n" , $key , $value );
}

$items = array (
    "Item 1" => "Value 1",
    "Item 2" => "Value 2",
    "Item 3" => "Value 3"
);

array_walk($items, 'test_print');

定义好函数后,您可以在代码中需要时重复使用array_walk($items, 'test_print');

如果您正在处理多维数组,则还有array_walk_recursive函数可用。


这是一个非常好的方法。我喜欢简化它,这使得代码更易于理解。 - Andrew Jackman

1
你的解决方案没有问题,只是缺少一个连接运算符。
$output = "";
foreach ( $items as $key => $value ) {
    $output .= sprintf( "%s: %s\n" , $key , $value );
}
echo $output;

请注意,此方法仅处理单维数组。
PHP 中有许多内置函数,有时我们会忘记实际上需要编写代码。评论中提到可以使用其中一个 array_* 函数,例如 array_reduce,但与您的解决方案相比,这只会导致更多的复杂性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接