Python的repr()返回一个输出结果,其中
eval(repr(object)) == object
被repr()内置函数和字符串转换(反引号)调用,以计算对象的“官方”字符串表示形式。如果可能的话,这应该看起来像一个有效的Python表达式,可以使用相同的值重新创建对象(在适当的环境下)。因此,在PHP中最接近的是
var_export — 输出或返回可解析的变量字符串表示形式。关键字是“可解析”。虽然函数print_r和var_dump会给出传递给它们的数据的某些表示,但它们不容易解析,也不像PHP表达式,可以eval评估。例如:
var_export(['foo', 'bar', 1,2,3]);
将会给予
array (
0 => 'foo',
1 => 'bar',
2 => 1,
3 => 2,
4 => 3,
)
这是完全有效的 PHP 代码:
$data = ['foo', 'bar', 1, 2, 3];
$repr = var_export($data, true);
$evald = eval("return $repr;");
var_dump($evald == $data);
另一个选择是使用
serialize
来获取数据类型的规范且可解析的表示,例如:
$data = ['foo', 'bar', 1, 2, 3];
$repr = serialize($data);
var_dump( unserialize($repr) == $data );
与
var_export
不同,其结果表示不是PHP表达式,而是指示类型及其属性/值(序列化)的压缩字符串。
但您可能只是在寻找其他地方指出的json_encode
。
将此设置为社区Wiki,因为我已经在给定的重复问题中回答过了。
ob_start()
和ob_end_clean()
中,但我现在会使用它。 - Niklas Rprint_r
不需要ob_start
等等--只需指定第二个参数,它就会输出到一个变量。这个功能是在PHP 4.3中添加的,所以如果你认为它需要ob_start
,那么你已经落后了十年。但无论如何,如果你只想输出字符串和数字的数组,我会选择json_encode
的答案;它更接近你问题中的输出。 - SDC