Показать сообщение отдельно
  #4 (permalink)  
Старый 04.06.2020, 18:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от thislegion
Но так ведь все работает
А разве это одно и тоже, что и ранее представленное? Этот код <?=$arr[i][1]; ?> на сервере сгенерирует предупреждение, если их вывод разрешен. А в режиме отладки, это лучше делать, так как безобидное, на первый взгляд, предупреждение, может быть причиной и дальнейших ошибок.

Этот код заставит РНР искать среди констант константу 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, 04.06.2020 в 18:50.
Ответить с цитированием