我有一个 PHP 对象数组。在一个 JavaScript 函数中,我想访问数组中一个对象的属性。如果我使用 json_encode
编码整个数组,显示这些属性是 undefined
的。我该如何做?我是 PHP 初学者。
PHP 代码:
$_SESSION['objArray'] = $objArray;
Javascript 代码:
const objArray = <?php echo json_encode(($_SESSION['objArray'])) ?>;
我有一个 PHP 对象数组。在一个 JavaScript 函数中,我想访问数组中一个对象的属性。如果我使用 json_encode
编码整个数组,显示这些属性是 undefined
的。我该如何做?我是 PHP 初学者。
PHP 代码:
$_SESSION['objArray'] = $objArray;
Javascript 代码:
const objArray = <?php echo json_encode(($_SESSION['objArray'])) ?>;
你需要对数组进行JSON编码,以便JavaScript客户端可以使用。
正如你提到的,你的数组中有特定类的实例,因此简单的JSON编码肯定行不通。
在这里,PHP提供了JsonSerializable
接口。你需要在你的类上实现这个接口。让我们以Foo
为例:
class Foo implements JsonSerializable
{
private $thing;
public function __construct($thing)
{
$this->thing = $thing;
}
public function jsonSerialize()
{
return [
'thing' => $this->thing,
];
}
}
这里是上面代码片段的一个示例。正如您所看到的,现在您可以创建一个Foo
实例,将其嵌入到数组或其他任何东西中,并使用自己的表示形式进行JSON编码:
$foo = new Foo('something');
echo json_encode(['foo' => $foo]);
// {"foo": {"thing": "something"}}
将此输出到内联JavaScript块中,类似于您编写的方式:
<script type="application/javascript">
const obj = "<?php echo json_encode(($_SESSION['objArray'])) ?>;";
</script>
将 PHP 数组存储到 JavaScript 变量中,
示例值:($_SESSION['objArray']
中的示例数组)
$_SESSION['objArray'] = array(
'name' => 'foo',
'email' => 'foo@gmail.com',
'age' => 30
);
将对象转换为数组:(可选)(如果您在$_SESSION['objArray']
中有对象值)
$_SESSION['objArray'] = json_decode(json_encode($_SESSION['objArray']), true);
objArray
)
<script>
const objArray = "<?php echo json_encode($_SESSION['objArray']); ?>";
console.log(objArray);
</script>
控制台输出:
{"name":"foo","email":"foo@gmail.com","age":30}
解释:json_encode
函数将数组转换为json
字符串,而javascript会将其视为字符串,在赋值时需要用引号括起来,可以使用单引号'
或双引号"
。
希望这能帮到你。
json_decode(json_encode())
,您无法控制对象的序列化。您依赖于PHP在使用此功能时的行为。我会诚实地称其为hack。除此之外,序列化和反序列化JSON是相当慢的操作,因此我们不应该只为了将其反转而执行一次。 - Victor