2016-04-21 11 views
0

Sie versuchen, wann ein PHP-Array-Variable in json_encode JavaScript-Variable ein Problem hat:Key Ordnung, wenn json_encode PHP-Variable (Array) in JavaScript-Variable

var duration_options = <?=json_encode($duration_options)?>; 
     var duration_options_items = ''; 
     $.each(duration_options,function(index, value) { 
      if(init_act_duration == value){ 
       var selected_option = 'selected=selected'; 
       }else{ 
       var selected_option = ''; 
      } 
      duration_options_items = duration_options_items + '<option value="'+index+'" '+selected_option+'>'+value+'</option>'; 
     }); 

     duration_options_items = '<select class="form-control select2 select_ajax select_ajax_duration" name="edit_activity_duration" style="width:100%">'+duration_options_items+'</select>'; 

Der PHP-Array ist

Array 
(
    [0.5] => 0.5 
    [1] => 1 
    [1.5] => 1.5 
    [2] => 2 
    [2.5] => 2.5 
    [3] => 3 
    [3.5] => 3.5 
    [4] => 4 
) 

Nach json_encode wenn ich das json in meinem JavaScript verwenden, das Array ist wie:

Array 
    (

     [1] => 1 
     [2] => 2 
     [3] => 3 
     [4] => 4 
     [0.5] => 0.5 
     [1.5] => 1.5 
     [2.5] => 2.5 
     [3.5] => 3.5 
    ) 

Nur kann es nicht verstehen, wh y und habe keine Ahnung, wie man sie richtig bestellt

+1

_After json_encode wird: ..._ Ist das wirklich ein Javascript-Array? – hindmost

+0

überprüfen Sie dies: - https://eval.in/557376. Es besagt eindeutig, dass Sie etwas mit Ihrem Array vor 'json_encode' tun –

+0

Bitte bearbeiten Sie die Frage und posten Sie Ihren Code. Nimm nicht einfach an, dass PHP kaputt ist ;-) –

Antwort

0

Und was ist das Problem mit diesem, haben Sie die gleichen Schlüssel, so dass Sie sie gleich verwenden können? Es scheint nach Länge und dann nach Natur zu sortieren.

Wenn Sie Schleifenschlüssel verwenden.

+0

Ich habe meine Frage bearbeitet, um zu sehen, dass ich die Variable json_encode php benutze, um das Dropdown-Menü select/option mit loop zu erstellen –

2

Sie beobachten dieses Verhalten, weil Ihr Array keine Ganzzahlen und sequenzielle Schlüssel enthält. So bildet json_encode es zu einem JSON Objekt ab.

1

Ich nehme an, Sie übernehmen die JSON falsch ist, aber sie haben nicht wirklich überprüft es (es sind mehrere Möglichkeiten, in Ihrem Browser-Entwickler-Tools so, wie die Net Scheibe zu tun).

Sobald Sie es von JavaScript analysieren, wird es ein JavaScript Objekt. Daher ist die Reihenfolge der Schlüssel nicht garantiert, da die ECMAScript-Spezifikation Objekte definiert.

Wenn Sie kugelsichere Reihenfolge benötigen, müssen Sie auf reguläre Arrays, d. H. Mit aufeinander folgenden Null-basierten Integer-Schlüssel wechseln.