dzheka3d
@dzheka3d

Как упростить перепор массива?

Всем привет! Вывожу на страницу список из 400 записей. В каждой записи должен быть выпадающий список select (одинаковый, но отличающийся только выбранным элементов в нем).

Получается при выводе каждой записи, мне приходится выполнять примерно одно и тоже действие:

// этот код внутри while($row = $res->fetch_assoc())
foreach($select_items as $val){
   $selected = $val == $row['items'] ? 'selected' : '';
   $select .= '<option value="'.$row['id'].'" '.$selected.'>'.$row['name'].'</option>';
}


Получается, если в выпадающем списке около 20 элементов, то общая сумма циклов получится 8тыс. Есть ли способ как-то иначе отметить нужный элемент внутри выпадающего списка, без перебора массива?
  • Вопрос задан
  • 156 просмотров
Решения вопроса 2
Falseclock
@Falseclock
решаю нестандартные задачи
О боже.. зачем такой костыль?

Засуньте данные в JSON, на странице в HTML этот JSON выведите.
через JS пусть формируются эти списки на стороне клиента из JSON строки.

А рисуя HTML на стороне PHP вы мало того что раздуваете размер страницы до неимоверных размеров, так еще и сервер загружаете.

У меня в CRM по 500 строк и в каждой строке по 3 дропдаун меню.
В каждом дропдауне как минииум 10 значений. Если бы я делал это все на стороне сервера, то мой сервер бы задохнулся, а базе легла мертвым колом.

a1627f37e5754e8db8f74eea048dc029.PNG
Ответ написан
@antonowano
Профессиональный самоучка
Вывожу на страницу список из 400 записей. В каждой записи должен быть выпадающий список select (одинаковый, но отличающийся только выбранным элементов в нем).


Вы можете создать свой select элемент с одним общим списком, для этого нужны хорошие знания JavaScript.

Есть ли способ как-то иначе отметить нужный элемент внутри выпадающего списка, без перебора массива?


Что бы не плодить PHP-код создайте функцию, которая принимает первым аргументом все значения select`а, а вторым - какое значение нужно выбрать. И возвращающую html текст тега select.

function createSelect($items, $value) { /* Код функции */ }
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Zubastik_1
Можно выводить имя нужного элемента внутри while($row = $res->fetch_assoc()) а затем отмечать его в выпадающем списке с помощью js.
Ответ написан
Комментировать
trevoga_su
@trevoga_su
не важно, сколько у тебя итераций циклов. если это быстро работает - то все нормально
формировать select списки на клиенте - тоже не лучшее решение - будут на клиенте тормоза
используй пагинацию
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы