У меня есть массив PHP, который имеет идентификатор таблицы как ключ и поле таблицы в качестве значения.
Пример 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?
Когда вы кодируете ассоциативный массив в php в объект JSON, он больше не является массивом, это объект с ключами и значениями. Вы можете проходить через них в javascript, используя for..in
for (var key in obj) { console.log(obj[key]); }
Примечание: for..in
не имеет порядка garuntee, если вам нужно обеспечить порядок, вам нужно будет проиндексировать ваш массив вместо key=>value
и вместо этого использовать цикл for
(или while
).
Вы можете получить ключи своего массива с помощью Object.keys
, а затем 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); };
В старых браузерах вам понадобится полиполк, чтобы включить метод Object.keys
. На странице документации MDN есть один .