我有一个2D的数组$fields
。它不是标准类,而是从数据库中获取的。我需要做的是:将数据插入另一个数组并给出这样的结果(JSON编码):
"fields": {
"0": [{
"field": "text",
"name": "link",
"label": "Link",
"required": true,
"type": "string"
}, {
"field": "xx",
"name": "xx",
"label": "xx",
"required": xx,
"type": "xx"
}],
"1": {
{
"field": "xx",
"name": "xx",
"label": "xx"
},
{
"field": "xx",
"name": "xx",
"label": "xx"
}
}
}
我得到的是:
"fields": {
"0": [{
"field": "xx",
"name": "xx",
"label": "xx",
"required": xx,
"type": "xx"
}, {
"field": "xx",
"name": "xx",
"label": "xx",
"required": true,
"type": "xx"
}],
"1": {
"2": {
"field": "xx",
"name": "xx",
"label": "xx"
},
"3": {
"field": "xx",
"name": "xx",
"label": "xx"
},
}
}
现在我需要将数据插入$f
数组,然后将$f
数组插入数组$r
。要像这样打印"1": {
或"0": {
,我可以使用:
$r = array(
'f' => (object) $f
);
PHP代码:
foreach($fields AS $c => $field) {
$f[$field['id']][$c] = array(
"field" => $field['field'],
"name" => $field['name'],
"label" => $field['label'],
);
if($field['required'] == "1") {
$f[$field['id']][$c]['required'] = true;
}
}
问题主要是$c
,如果我只是[]
而不是[$c]
,它会生成另一个数组。我使用JavaScript代码编码的JSON,并且JSON编码结果都有效,但我需要第一个。
答案 0 :(得分:0)
您的第一个JSON输出无效。我希望将其复制到问题中只是一个错字。
"1": {
{
应为"1": [ {
。
如果是这种情况,您只需在代码后重新编号数组:
foreach($f as &$ff) $ff = array_values($ff);
unset($ff);
或者,如果您不知道或不喜欢参考文献:
foreach($f as $key => $ff) $f[$key] = array_values($ff);
然后json_encode应该创建你想要的输出。 (如果键是数字的,PHP数组会产生JSON数组,从0开始,没有空洞;否则它们将被编码为JSON对象)
如果你想避免使用另一个循环:
foreach($fields AS $field) {
$f[$field['id']][] = array(
"field" => $field['field'],
"name" => $field['name'],
"label" => $field['label'],
);
//hacky way to get the key of the array just created
$c = count($f[$field['id']) - 1;
if($field['required'] == "1") {
$f[$field['id']][$c]['required'] = true;
}
}
或者首先创建数组并将其插入到最后(稍微清洁一点):
foreach($fields => $field) {
$tmp = array(
"field" => $field['field'],
"name" => $field['name'],
"label" => $field['label'],
);
if($field['required'] == "1") {
$tmp['required'] = true;
}
$f[$field['id']][] = $tmp;
}