2014-11-13 2 views
0

hey ive удалось декодировать кодировку json i created, но когда я пытаюсь напечатать декодированный массив, он снова и снова повторяет одно и то же имя пользователя (последнее в списке). то, что я хочу, чтобы все пользователи desplayedjson decode/encode повторный массив

это код кодированного массива JSon

$query = 
    "SELECT 
    userid, 
    username, 
    password, 
    email 
    FROM Users ORDER BY userid"; 

$results = mysqli_query($connection,$query); 

Кодированный код массива ниже

<?php 
echo "Data with Json Encoding"; 
foreach($results as $row){ 

    $encode = json_encode($row, true); 
    echo '<pre>';print_r($encode); echo '</pre>'; 
    } 
?> 

декодированного кода массива ниже

<?php 
    echo "Data with Json Decoding"; 
    foreach($results as $row){ 
    $decode = json_decode($encode, true); 
    echo '<pre>'; print_r($decode);'</pre>'; 
    } 

это результат кода Данные с Json Decoding

Array 
(
    [userid] => 239 
    [username] => desposit4221 
    [password] => 699e5fae54df4c82314e42dd86c4d383 
    [email] => [email protected] 
) 

Array 
(
    [userid] => 239 
    [username] => desposit4221 
    [password] => 699e5fae54df4c82314e42dd86c4d383 
    [email] => [email protected] 
) 

именно это снова и снова, он должен быть список моих пользователей

любая помощь будет принята с благодарностью

+1

Вы декодируете '$ encode'. '$ encode' содержит последнее значение, которое вы ему назначили, то есть последнее значение, встреченное в предыдущем цикле (« Данные с кодировкой Json »), т. е. последняя строка вашего массива. Поэтому каждую итерацию вы декодируете одну и ту же строку. –

+0

Каждый раз, когда вы выполняете цикл, вы * переустанавливаете * '$ encode' на следующее значение. Когда цикл завершен, '$ encode' устанавливается в последний элемент. –

+1

Объясните, почему вам нужно кодировать и затем повторно декодировать ваши данные, чтобы мы могли дать вам более подходящее решение. (Вероятно, кодируя весь массив, а затем декодируя эту строку один раз, вам не нужен цикл.) –

ответ

0

echo "Data with Json Encoding"; 
$encodedResults = array(); 
foreach($results as $row){ 

    $encode = json_encode($row, true); 
    echo '<pre>';print_r($encode); echo '</pre>'; 

    $encodedResults[] = $encode; 
} 
?> 
echo "Data with Json Decoding"; 
foreach($encodedResults as $row){ 
    $decode = json_decode($row, true); 
    echo '<pre>'; print_r($decode);'</pre>'; 
} 
+0

Это решение работает, но я не понимаю, почему не сначала кодировать весь массив. В чем смысл, если после кодирования мы все еще имеем массив закодированных данных, а не только кодированную строку? –

+0

Спасибо, что сработал. его uni работает, не вдаваясь в что-то реальное, мне просто нужно показать, что я сделал как кодирование, так и декодирование. – user3542382

+0

. Вы должны принять ответ правильно. – costa

0

Если положить line

$encode = json_encode($row, true); 

в ваш второй цикл сразу после линии foreach, вы должны получить ожидаемые результаты. Это разумный способ изучить аспекты обработки данных php. Удачи в ваших проектах!

0

закодировать массива:

echo "Data with Json Encoding"; 
$encoded_datas = json_encode($results); 
echo $encoded_datas; 

Decode строку в массив:

echo "Data with Json Decoding"; 
$decoded_datas = json_decode($encoded_datas, true); 
echo '<pre>'; 
print_r($decoded_datas); 
echo '</pre>'; 

Вам не нужно кодировать (и затем декодировать) ваш ряд массив по строкам. Плюс, как объяснено в комментариях и как показано в ответе costa, ваш код не работал, потому что вы каждый раз декодировали одну и ту же строку: ваша переменная $encoded содержит последнее значение, которое вы в нее вставляете (последняя строка, кодируются).

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