2013-11-12 5 views
1

У меня есть данные в моей базе данных (mysql), которые я пытаюсь вытащить на страницу в формате json, поэтому я могу выбрать данные для дальнейшего использования.PHP Развернуть новую строку в массив для json

Текущие выходные данные

{ 
    "quotes": [ 
     { 
      "season": "3", 
      "episode": "2", 
      "lines": [ 
       "Boys:\tSchool day, school day, teacher's golden ru\nKyle:\tAh, damn it! My little brother's trying to follow me to school, again. " 
      ] 
     }, 
     { 
      "season": "1", 
      "episode": "2", 
      "lines": [ 
       "Episode 2 " 
      ] 
     } 
    ] 
} 

Часть я борюсь с становится lines для отображения как так

"lines": [ 
      {"Boys": "School day, school day, teacher's golden ru"}, 
      {"Kyle": "Ah, damn it! My little brother's trying to follow me to school, again."} 
     ] 

В PHP У меня есть

$result = $con->query("SELECT * FROM quotes"); 
$response = array(); 
$i=0; 
while ($row = $result->fetch_assoc()) { 
    $response[$i]['season']= $row['season']; 
    $response[$i]['episode']= $row['episode']; 
    $response[$i]['lines'] = explode('\n', $row['lines']); 
    $data['quotes'][$i] = $response[$i]; 
    $i=$i+1; 
} 
$json_string = json_encode($data); 

echo $json_string; 

Если кто-нибудь может помочь будь здорово!

+0

Проблема с ключевыми «строками» заключается в том, что нет ключа, который различает каждую строку, например «Мальчики» или «Кайл». Я думаю, это потому, что 'Кайл' мог бы сказать 2 строки, это перепишет каждую строку своей последней указанной строкой. Существует ли правило в структуре строк, например. что '\ n' всегда конец каждого, а' \ t' - начало нового? – dbf

ответ

0

Заменить

$response[$i]['lines'] = explode('\n', $row['lines']); 

С

$lines = explode("\n", $row['lines']); 
$indexedLines = array(); 

foreach($lines as $thisLine) { 
    $sepIndex = strpos($thisLine, ":\t"); 
    $lineIndex = substr($thisLine, 0, $sepIndex); 
    $lineContent = substr($thisLine, $sepIndex + 2); 
    $indexedLines[ $lineIndex ] = $lineContent; 
} 
$response[$i]['lines'] = $indexedLines; 

Для модели, которая позволяет нескольким линиям на динамик, и сохраняет порядок строк, заменить:

$indexedLines[ $lineIndex ] = $lineContent; 

С чем-то по линиям:

$indexedLines[] = array('speaker' => $lineIndex, 'line' => $lineContent); 
+0

Этот код, кажется, делает то, что я хочу, но очень большой объем выводимой информации. Попытка выяснить, как и кавычки на выходе – ngplayground

+0

Если вы можете предоставить больше данных, то я уверен, что он может быть решен, но ответ отправлен точно так, как вы хотите, для примеров, которые вы даете. –

+0

Наиболее очевидная проблема заключается в том, что предлагаемый формат данных допускает только одну цитату на человека. Например. вторая цитата «Мальчики» перезапишет первую. –

5
explode('\n', $row['lines']); 

должен быть

explode("\n", $row['lines']); 

Обратите внимание на двойные кавычки. Управляющие символы, выраженные с предыдущей косой чертой, должны быть заключены в двойные кавычки.

+0

Спасибо, что работает и показывает как «Мальчики: \ tШшкольный день, школьный день, золотой учитель ru», «но есть ли способ получить его как' {«Мальчики»: «День школы, школьный день, золотой золотой учитель», }, ' – ngplayground

+0

Если вы хотите удалить вкладки (\ t), просто выполните взорваться (" \ n ", str_replace (" \ t "," ", $ row ['lines'])) – marekful

-2
$line = array(); 
$lines = array(); 

$line['Boys'] = "School day, school day, teacher's golden ru"; 
$line['Kyle'] = "Ah, damn it! My little brother's trying to follow me to school, again."; 

$lines['lines'] = $line; 

удачи!

+0

Не могли бы вы объяснить, что в код, который вы опубликовали, является ответом на проблему, происходящую здесь, чтобы пользователи и будущие читатели могли учиться у нее? –

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