2012-03-22 11 views
1

phpからいくつかのMySQLテーブルの注文json_encodeリストを送信していますが、jqueryでそれを取得すると、それ以上の順序ではありませんか?すべてが正常に動作し、PHP側で順番に動作します。それは私が問題を抱えているクライアント側です。私は問題が私はPHPからjsonとして多次元配列を送信していると思う。最も効率的なソリューションは何でしょうか?また、なぜjQueryで取得したときに順序が変更されたのでしょうか。jQuery order json list from php?

PHPコード:

$user_data = array(); 

while($row = mysql_fetch_array($retval, MYSQL_ASSOC){ 
    $user_id = $row['user_id']; 

    if(!isset($user_data[$user_id]){ 
     $user_data[$user_id] = array(
      'first_name' => $row['first_name'], 
      'last_name'  => $row['last_name'], 
      'dept'   => $row['dept'], 
      'quals'   => array() 
     ); 
    } 

    $quals = array(
     'qual_cat' => $row['qual_cat'], 
     'qual'  => $row['qual'], 
     'count'  => $row['count'] 
    ) 

    $user_data[$user_id]['quals'][] = $quals; 
} 


echo json_encode($user_data); 

のjQuery:

$.post('page.php', function(post){ 
    $.each(post, function(i,data){ 
     alert(data.first_name+' '+data.last_name+' - '+data.dept); 
    }); 
}); 

PHPのvar_dump:PHPで

array 
10 => 
array 
    'first_name' => string 'David' (length=5) 
    'last_name' => string 'Dan' (length=3) 
    'dept' => string 'web' (length=3) 
    'count' => string '5' (length=1) 
    'quals' => 
    array 
     0 => 
     array 
      ... 
     1 => 
     array 
      ... 
     2 => 
     array 
      ... 
     3 => 
     array 
      ... 
     4 => 
     array 
      ... 
+0

var_dumpとしてデータを入力してください – safarov

+0

Chromeを使用していますか?これは問題になる可能性があります - http://stackoverflow.com/questions/640745/google-chrome-javascript-associative-arrays-evaluated-out-of-sequence –

+0

@safarov私はちょうどvar_dumpを下に入れて質問を更新しました – ddan

答えて

1

、配列は、デフォルトの連想であるので、あなたのように、この動作を持っている理由です連想配列の順序は保証されません(benedict_wによって与えられたリンクの説明に従って)。これを克服するために

、次のことを試みることができる:

echo json_encode(array_values($user_data)); 

あなたがトラックを保持する必要がある場合はこれが効果的に

[{prop1:val1, prop2:val2}, {prop1:val1, prop2:val2}] 

["10":{prop1:val1, prop2:val2}, "25":{prop1:val1, prop2:val2}] 

からあなたのJSONをオンにしますid、あなたのPHPのuser_dataの中に入れて:

if(!isset($user_data[$user_id]){ 
    $user_data[$user_id] = array(
     'id' => $user_id, 
     'first_name' => $row['first_name'], 
     'last_name'  => $row['last_name'], 
     'dept'   => $row['dept'], 
     'quals'   => array() 
    ); 
} 
+0

あなたは 'デフォルトで結ばれた 'パートについて間違っています。その数値 – Starx

+0

http://sg.php.net/manual/en/language.types.array.php 'PHPの配列は、実際には順序付けられたマップです。マップは値をキーに関連付けるタイプです。 ' –

+0

array_values()が機能しました。ありがとう男 – ddan