2013-04-24 2 views
1

У меня есть массив PHP, который имеет идентификатор таблицы как ключ и поле таблицы в качестве значения.Loop Through PHP Array, закодированный в JSON

Пример PHP:

while($row = mysql_fetch_array($result)) 
{ 
    $id = $row['id']; 
    $array[$id] = $row['some_field']; 
} 

Затем я использую json_encode($array), чтобы получить что-то вроде:

{"id1":"value1","abc":"123","xyz":"789"} 

Как петля через это в JQuery? Из того, что я нашел до сих пор, кажется, что мне нужно знать ключ. Итак:

var obj = jQuery.parseJSON(jsonVar); 
alert(obj.abc); //prints 123 

Но как я могу получить эти значения, если я не знаю ключей, поскольку они являются динамическими?
Нужно ли мне реструктурировать мой массив PHP?

ответ

3

Как только вы кодируете ассоциативный массив в php в объект JSON, он больше не является массивом, это объект с ключами и значениями. Вы можете перебирать их в JavaScript с помощью for..in

for (var key in obj) { 
    console.log(obj[key]); 
} 

Примечания:for..in не garuntee заказа, если вам нужно, чтобы обеспечить порядок вы должны будете сделать ваш массив индексируется, а key=>value и использовать for цикл (или while).

+0

Got it. Я был в предположении, что я не мог использовать 'for..in' из-за [этого вопроса] (http://stackoverflow.com/questions/9329446/for-each-in-a-array-how-to-do -Вот-в-JavaScript). Затем я перечитываю часть, в которой говорится: «для ... для перечисления свойств ** объекта **», думая, что у меня есть массив. Итак, именно то, что мне было нужно в конце концов. Спасибо. – Ryan

+0

Обратите внимание, что даже если это не считается лучшей практикой из-за двусмысленности и неуправляемого порядка сортировки, вы можете использовать 'for..in' для циклических регулярных массивов ... вы просто * не должны *. – JaredMcAteer

3

Вы можете получить ключи своего массива, используя Object.keys, а затем прокрутите их. В отличие от for...in, это дает вам возможность .sort() ключи перед их обработкой:

var keys = Object.keys(obj).sort(); // sorting is optional 
for (var i=0; i<keys.length; i++) { 
    var key = keys[i], 
     val = obj[key]; 
    console.log(key+":"+val); 
}; 

В старых браузерах, вам потребуется polyfill для того, чтобы метод Object.keys. MDN has one on their documentation page.

+0

У меня работает JaredMcAteer, но я тоже это проверю. Сортировка будет приятной. – Ryan

+0

Прохладный, работал. Благодарю. – Ryan