我从数据库提取过程得到了一个结果集,其中包含了我的api的不同对象的一部分,我想将其重新格式化为我想要的json格式。有快速的方法吗?
离。结果数组的格式为
$tasks = array ( 0=>
array(id, taskName, user_id, user_name, user_surname) ...
)
并想转换为
$tasks = array ( 0=>
array(id, taskName, user=> array(id, name, surname) )
)
答案 0 :(得分:0)
这取决于你的意思"快速"。没有预先存在的功能可以执行您想要的功能,并且因为它是一个多维数组,您无法在单个查询中返回数据。因此需要几行代码。您可以手动分配它们(假设$result
是初始数组):
$result['user_id'] = array(
'id' => $result['user_id'],
'name' => $result['name'],
'surname' => $result['surname']
);
为了获得您正在寻找的最终结果,您还需要在取消之后取消之前的值:
unset $result['user_id'], $result['name'], $result['surname'];
如果您要返回多行,则您希望在循环中执行类似的操作。
答案 1 :(得分:0)
Nick Coons打败了我,但无论如何我会添加它。 array_map
在这里迭代每一行并根据需要对其进行格式化非常有用。
$tasks = array_map(function ($task) {
return [
'id' => $task[0],
'task_name' => $task[1],
'user' => [
'id' => $task[2],
'user_name' => $task[3],
'surname' => $task[4],
]
];
}, $tasks);
打印出来$tasks
然后会给你:
Array
(
[0] => Array
(
[id] => 1
[task_name] => task name
[user] => Array
(
[id] => 1
[user_name] => jsmith
[surname] => smith
)
)
[1] => Array
(
[id] => 2
[task_name] => task name
[user] => Array
(
[id] => 2
[user_name] => jdoe
[surname] => doe
)
)
)