数据库拉后重新格式化php数组

时间:2015-07-31 17:07:30

标签: php arrays json

我从数据库提取过程得到了一个结果集,其中包含了我的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) )
)

2 个答案:

答案 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
                )

        )

)