2013-04-02 6 views
0

Я не могу понять, в чем проблема, но мой массив PHP не выводит как правильный JSON. Я удалил функцию json_encode, только чтобы узнать, что мой массив каскадирует и не правильно форматирует себя. Вот пример вывода (с json_encode удалены):PHP Array не правильно форматирует

Array (
    [0] => Array (
     [username] => g4m3b0y 
     [profile_photo] => default.png 
     [email] => [email protected] 
     [first_name] => Michael 
     [last_name] => Simpson 
    ) 
) 
Array (
    [0] => Array (
     [username] => g4m3b0y 
     [profile_photo] => default.png 
     [email] => [email protected] 
     [first_name] => Michael 
     [last_name] => Simpson 
    ) 
    [1] => Array (
     [username] => michelle 
     [profile_photo] => default.png 
     [email] => [email protected] 
     [first_name] => Michelle 
     [last_name] => Houston 
    ) 
) 

Как вы можете видеть, это создание дубликатов результатов в отдельных массивах, следовательно, мой вопрос с выходом JSON. Вот мой код, который генерирует результаты:

$sql2 = "SELECT DISTINCT username, profile_photo, first_name, last_name, email FROM users WHERE (
     first_name LIKE '%$q%' 
     OR last_name LIKE '%$q%' 
    ) ORDER BY last_name"; 

    $sq2 = mysql_query($sql2); 
    $st2 = mysql_num_rows($sq2); 

    if($st2>=1) { 
     while($a = mysql_fetch_array($sq2)) { 
      $userRow[] = array(
       'username' => $a['username'], 
       'profile_photo' => $a['profile_photo'], 
       'email' => $a['email'], 
       'first_name' => $a['first_name'], 
       'last_name' => $a['last_name'] 
      ); 
     header('Content-Type: application/json'); 
     echo json_encode($userRow); 
     } 
    } 

    else { 
     exit; 
    } 
+0

Что $ userRow [] выглядеть как внутри цикла - эхо это, чтобы доказать, что вы получаете правильные данные первого – acutesoftware

+1

Stop с помощью 'функций mysql' тоже. Используйте 'mysqli' или PDO. –

+0

Каковы преимущества использования mysqli vs mysql? Извините, если вопрос очевиден, но ищите здесь несколько советов. Благодаря! – viablepath

ответ

1

Ваш призыв к header и json_encode находится внутри вашего цикла. Переместите его снаружи, и он скомпилирует лот в одну строку json. В настоящее время он выводит несколько отдельных.

Это также объясняет, почему вы тоже получаете дубликат. Итерация 1 добавляет первую строку в массив $userRow, затем выводит результат, который получил ключ 0. Затем вторая итерация добавляет следующую строку в существующий массив и, следовательно, получает ключ 1. Затем он снова выводит строку json encoded string, поэтому на этот раз печатает 0 и 1. Следовательно 0, то 0, то 1

$sql2 = "SELECT DISTINCT username, profile_photo, first_name, last_name, email FROM users WHERE (
    first_name LIKE '%$q%' 
    OR last_name LIKE '%$q%' 
) ORDER BY last_name"; 

$sq2 = mysql_query($sql2); 
$st2 = mysql_num_rows($sq2); 

if($st2>=1) { 
    while($a = mysql_fetch_array($sq2)) { 
     $userRow[] = array(
      'username' => $a['username'], 
      'profile_photo' => $a['profile_photo'], 
      'email' => $a['email'], 
      'first_name' => $a['first_name'], 
      'last_name' => $a['last_name'] 
     ); 
    } 

    // I moved this below the above } 
    header('Content-Type: application/json'); 
    echo json_encode($userRow); 
} 

else { 
    exit; 
} 
Смежные вопросы