JSON编码数组从PHP传递到HTML文档。如何将该数组解构为可用于javascript的片段并不清楚。例如,请考虑以下HTML:
<div id="options">{"foo":[{"id":1},{"id":3}], "bar":[{"id":2},{"id":4}]}</div>
此数组中唯一先验已知元素是密钥id
存在。我知道,这些指数可以在
var data = JSON.parse($("#options").text());
$.each(data, function(index) {
// index will be foo & bar
});
用例是使用索引和id向文档中的元素添加属性。我还没有偶然发现返回与每个索引相关联的ID的技术。如何才能做到最好?
我想基于实体的属性(在Symfony应用程序中)重新启用表单上的一些选项。禁用的选项不能修改,但也不能保留 - 它们的值设置为null。我已经构建了一个服务来确定被禁用的选项元素,并将这些元素作为JSON对象发送到表单文档。我现在假设在创建表单之前不知道特定选项。在上面的示例中,foo
&amp; bar
表示可能的选项,而id对应于该选项。例如,Household
实体可能选择Reason
个选项,但禁用&#34;低工资&#34; (id = 3)。这将显示为...id="options">{"reasons":[{"id":3}]}<...
。我会使用此信息从Reason,id = 3(即disabled="disabled"
)字段的复选框集中删除id="household_reasons_3"
属性。我希望这是有道理的。
getMetatData()
的结果显示在#options
的文档中。从上面的编辑中,家庭实体是$object
。
public function getMetaData($object) {
$data = array();
$className = get_class($object);
$metaData = $this->em->getClassMetadata($className);
foreach ($metaData->associationMappings as $field => $mapping) {
if (8 === $mapping['type']) {
$data[$field] = $this->extractOptions($object, $field);
}
}
return json_encode($data);
}
private function extractOptions($object, $field) {
$data = [];
$method = 'get' . ucfirst($field);
$itemName = substr($field, 0, -1);
$getter = 'get' . ucfirst($itemName);
$entity = $object->$method();
foreach ($entity as $item) {
if (method_exists($item, 'getEnabled') && false === $item->getEnabled()) {
$data[] = ['id' => $item->getId()];
}
}
return $data;
}
答案 0 :(得分:0)
在达到无限的猴子限制之前很久,我偶然发现了一种方法来创建我正在寻找的结果。我要感谢所有推动澄清的人。所以,对于对象
{"foo":[{"id":1},{"id":3}], "bar":[{"id":2},{"id":4}]}
脚本
var data = JSON.parse($("#options").text());
var i = 0
var output = [];
$.each(data, function(index, item) {
$.each(item, function(k, v) {
output[i] = "household_" + index + "_" + v.id;
i++;
});
});
output;
产生这个:
["household_foo_1", "household_foo_3", "household_bar_2", "household_bar_4"]
我得到了我需要的琴弦;我可以从这里拿走它。