Не работает цикл
Такая конструкция цикла не работает
for (let i = 0; i < 2; i++) { let сours[i]= <?=$arr[i][1]; ?>; document.write(сours[i]); } <?=$arr[i][1]; ?> - php скрипт, где $arr[i][1] вывод из массива $arr Как сделать так чтобы выводилось сours0, сours1, сours2 ? Вот так не выходит: for (let i = 0; i < 2; i++) { let сours.i = <?=$arr[i][1]; ?>; document.write(сours.i); } |
for (let i = 0; i < 2; i++) - это выполнение цикла на клиентской стороне, в браузере, где серверный скрипт отсутствует. Как может РНР знать о текущей итерации этого цикла (<?=$arr[i][1]; ?>), если его на клиенте нет?
|
Цитата:
<? $arr=[0.99,1.15,2.83]; ?> <script> let сours0 = <?=$arr[0]; ?>; let сours1 = <?=$arr[1]; ?>; //document.write(сours1); alert(сours0); alert(сours1); </script> |
Цитата:
Этот код заставит РНР искать среди констант константу i (то что прописано выше, let i = 0, ничего не значит, это просто текст, который РНР выдает в браузер), и не найдя ее вернет NULL, и $arr[i][1] также вернет NULL, ибо такого элемента в массиве $arr нет. Здесь же: <script> let сours0 = <?=$arr[0]; ?>; let сours1 = <?=$arr[1]; ?>; //document.write(сours1); alert(сours0); alert(сours1); </script> вывод в браузер кода в теге <script>, который будет выполнен на клиенте, и в котором js переменным сours0, сours1 посредством РНР будет вставлены значения из массива, также определенного в РНР. В итоге браузер получит на странице следующее: <script> let сours0 = 0.99; let сours1 = 1.15; //document.write(сours1); alert(сours0); alert(сours1); </script> и что без проблем в нем будет выполнено. PS. Если вы хотите массив определяемый сервером обойти в цикле на клиенте, нужно этот массив передать клиенту как JS массив, например так (до for (let i = 0; i < 2; i++)): let arr = <?=json_encode($arr)?>; И если его нужно весь обойти, то не i < 2; (если размер массива увеличится, то это потребует и изменения кода), а i < arr.length;, и вместо let сours[i]= <?=$arr[i][1]; ?>;, let сours[i]= arr[i]; (при этом сours должна быть объявлена как массив), зачем только это нужно не понимаю. |
Спасибо laimas, ситуация прояснилась.
|
Цитата:
Вам следует скачать нужные данные (ваш массив) с сервера или подключить данные к странице. Давайте рассмотрим пример с подключением данных... index.php <?php $data = [ 'arr' => [0.99, 1.15, 2.83] ]; ?> <script> window['cfg'] = <?= json_encode($data); ?>; </script> <script src="app.js"></script> app.js const { arr } = window.cfg; for (let i = 0; i < arr.length; i++) { let сours = arr[i]; document.write(сours); } Таким образом, PHP код занят только заполнением структуры данных, а JavaScript только использованием предоставленной структуры данных. Такое разделение позволяет легко добавить асинхронную загрузку данных (xhr или fetch) в будущем. Скрипт статичен и может быть кэширован. Разделение проблем JS и PHP. Возможность использовать все блага экосистемы JS — среди которых минификация, транспиляция кода и пр. Содержание данных PHP в объекте window['cfg'] подходит для большинства случаев использования, но лучше всего отделить его полностью. Вы можете использовать RESTful API для запроса только тех данных, которые вам нужны, это чуть больше JavaScript, но с ещё большими преимуществами. |
Часовой пояс GMT +3, время: 21:50. |