2015-03-02 5 views
-1

Tengo un problema que no puedo resolver.Array php to Json

Suponiendo дие Tengo эль Siguiente массив

$data[] = array('Analista','Analista de riesgos','Pedro'); 
$data[] = array('Analista','Analista de riesgos','Juan'); 
$data[] = array('Analista','Analista de riesgos','Yrving'); 
$data[] = array('Analista','Anaslita de mercado','Margarita'); 
$data[] = array('Analista','Anaslita de mercado','Jesus'); 
$data[] = array('Analista','Anaslita de mercado','Manuel'); 
$data[] = array('Analista','Analista de Sistemas','Cintya'); 
$data[] = array('Analista','Analista de Sistemas','Paola'); 
$data[] = array('Analista','Analista de Sistemas','Clara'); 
$data[] = array('Tecnico','Tecnico de PC','Roberto'); 

и я хочу путешествовать той же группе его и возвращает JSON, как это.

[ 
    { 
    "Analista": [ 
     { 
     "Analista de riesgos": [ 
      "Pedro", 
      "Juan", 
      "yrving" 
     ] 
     }, 
     { 
     "Analista de mercado": [ 
      "Margarita", 
      "Jesus", 
      "Manuel" 
     ] 
     }, 
     { 
     "Analista de Sistemas": [ 
      "Cintya", 
      "Paola", 
      "Clara" 
     ] 
     } 
    ], 
    "Tecnico": [ 
     { 
     "Tecnico de PC": [ 
      "Roberto" 
     ] 
     } 
    ] 
    } 
] 

как они?

В реалиях массива данных я получаю его на основе запроса BD (используйте PDO) и использовал fetchAll (PDO :: FETCH_COLUMN | PDO :: FETCH_GROUP));, но работает только с двумя столбцами, а также не всегда будет три столбца, может быть, больше.

Благодаря

PD: Я знаю функцию json_encode, проблема заключается в том, как идти по массиву и сгруппированных полей

+0

json_encode() будет вашим другом –

+0

спасибо, но я знаю функцию json_encode, проблема в том, как пройти через массив и сгруппированные поля –

ответ

0

I подумайте, что вам нужно использовать пользовательскую функцию, если вы хотите обобщить этот алгоритм:

function makeTree($array) { 
    $tree = array(); 

    foreach ($array as $row) { 
     $node = &$tree; 

     for ($level = 0; $level < count($row) - 1; $level++) { 
      $node = &$node[$row[$level]]; 
     } 

     $node[] = $row[count($row) - 1]; 
    } 

    return $tree; 
} 

Примером этого кода является here.

+0

Привет, что такое & $? Это в руководстве по PHP? –

+0

@YrvingHeysenMolinaYriarte Это называется [ссылка] (http://php.net/manual/en/language.references.php). – Phylogenesis

1

довольно просто получить эту структуру:

foreach($data as $value) { 
    $result[$value[0]][$value[1]][] = $value[2]; 
} 
+0

Привет, я изменил ваш код для работы с более чем тремя столбцами. используя foreach() и eval(); –

+0

Не нужно 'eval'. – AbraCadaver