2013-11-26 3 views
-3

Я использую codeigniter php framework и select2 jquery plugin.Каков самый умный способ структурирования массива JSON в этом случае?

Я хочу, чтобы загрузить все имена, хранящиеся в моей базе данных с его идентификатором, поэтому я использую аа запрос следующим образом:

select id, name from drivers; 

Затем я форматировать результат, возвращаемый таким образом:

$data = array() 

foreach ($query->result_array() as $row){ 
    $data[$row["id"]] = $row["name"]; 
} 

return $data; 

После этого я печатаю массив, закодированный в JSON, и он получает ajax. В JQuery я сделать что-то вроде этого:

var html_res = "<option></option>"; 

$.each(data_json, function(key, value){ 
    html_res += "<option value='" + key + "'>" + value + "</option>"; 
}); 

$("#my-select2").html(html_res); 

Это работает, но я действительно interesed, если есть/простой способ eficient, чтобы получить тот же результат.


Также у меня есть еще один маленький вопрос: Теперь у меня есть запрос, как и выше:

select id, name, age from drivers; 

И я хочу, чтобы загрузить содержимое в выбор2 плагин в двух diferents <optgroup>:

  • Первый содержит драйверы с возрастом> 50.
  • Последний диск с возрастом < 50.

Но я не знаю, что лучше всего в этом случае структурировать ассоциативный массив в php, а затем загрузить его в select2 с помощью функции $.each.

Не могли бы вы рассказать мне, как вы это делаете? Я только придумал это решение для первого вопроса (не знаю, является ли это лучшим). Но, боюсь, у меня нет никого для второго.

Любой совет, помощь или совет будут оценены, и если вам нужна дополнительная информация, сообщите мне, и я отредактирую сообщение.

ответ

1

Что-то вроде:

PHP

$data = array(
    "under 50" => array(), 
    "over 50" => array() 
); 

foreach ($query->result_array() as $row){ 
    $el = array(
     "name" => $row["name"], 
     "age" => $row["age"] 
    ); 
    if ($row["age"] < 50) { 
     $data["under 50"][$row["id"]] = $el; 
    } else { 
     $data["over 50"][$row["id"]] = $el; 
    } 
} 

return $data; 

JS

var html_res = "<optgroup><option></option>"; 

$.each(data_json["under 50"], function(key, row){ 
    html_res += "<option value='" + key + "'>" + row.name + "</option>"; 
}); 
html_res += "</optgroup><optgroup>" 
$.each(data_json["over 50"], function(key, row){ 
    html_res += "<option value='" + key + "'>" + row.name + "</option>"; 
}); 
html_res += "</optgroup>"; 

$("#my-select2").html(html_res); 

Вы не строго необходимо отправить возраст, но это, как вы можете расширить ваш список драйверов. Очевидно, что вам нужен возраст.

+0

Спасибо! А теперь представьте, что вместо возраста я хочу загрузить страну драйверов и загрузить их в группы опций. Массив php будет выглядеть так: '$ data [$ row [" country "]] [$ row [" id "]] = $ row [" name "]'. Но как я могу разобрать его в jQuery? Вы не можете использовать '$ .each (data_json [" spain "], ...' потому что вы не знаете, сколько стран загружено. – harrison4

+1

Вы делаете '$ .each (data_json, ..)' first, который будет дайте вам «Испанию» как один из «ключей» и список драйверов как «значение». – Halcyon

+0

Что-то вроде этого: http://chopapp.com/#k6wm10dc? Если это так, вы мне очень помогли. хотели узнать об этом в течение длительного времени.:) – harrison4

Смежные вопросы