2015-07-31 3 views
0

Ii've получил набор результатов из процесса вытаскивания базы данных, который включает в себя части разных объектов моего api, которые я хотел бы переформатировать в желаемый формат json. Есть ли быстрый способ сделать это?переформатирование php-массива после выталкивания базы данных

ex. Результат массив имеет вид

$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

привет спасибо за ответ. не так много, чтобы показать, что это мой результат запроса из SQL-запроса, соединяющего две таблицы (задачи и пользователи), отличные от этого, что в значительной степени является отправной точкой. вы предполагаете, что я не должен начинать с запроса этой формы? – Kostas

ответ

0

Это зависит от того, что вы подразумеваете под «быстрым». Существует не существовавшая ранее функция, которая будет делать то, что вы хотите, и потому что это многомерный массив, вы не можете возвращать данные, подобные этому в одном запросе. Так что это займет несколько строк кода. Вы можете присвоить каждому из них вручную (при условии, что $result является исходный массив):

$result['user_id'] = array(
    'id'  => $result['user_id'], 
    'name' => $result['name'], 
    'surname' => $result['surname'] 
); 

Чтобы получить именно конечный результат, который вы ищете, вы также хотите, чтобы сбросить предыдущие значения после вытягивать из них:

unset $result['user_id'], $result['name'], $result['surname']; 

Если вы возвращаете несколько строк, вы захотите сделать что-то подобное в цикле.

+0

спасибо большое Ник, это на самом деле то, что я собирался, но я думал, что такой процесс добавит к моему процессу время для больших результатов. – Kostas

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 
       ) 

     ) 

) 
Смежные вопросы