Загрузка php-массива в javascript

так что я полный php / javascript noob.

Я пытаюсь загрузить полный массив php в массив javascript. Я написал это для Javascript:

var names = new Array(); for(var i = 0; i < 48; i++) { names[i] = "<?php echo giveJS() ?>"; } 

И это для php

 static $counter = 0; function giveJS() { global $names; global $counter; $counter++; return $names[$counter]; } 

Я уже проверил, правильно ли заполнен массив php данными. Когда я пишу строку вывода в javascript, например

 document.write(names[10]); 

это только дает мне первую запись в массиве php, поэтому кажется, что каждый раз, когда цикл for повторяется, он инициализирует php-файл с нуля и поэтому устанавливает счетчик на 0. Как я могу это исправить?

Thx, Linkee

В php

 //Bla being the php array you want to give to javascript. Create it however you like $bla = array(); $bla[] = 'cat'; $bla[] = 'dog'; $bla[] = 'bat'; echo '<script>var myarray = '.json_encode($bla) .';</script>'; 

Вышеприведенный код затем выдает тег скрипта, содержащий переменную myarray, затем содержимое которой будет JSON, определяющее вышеупомянутый массив (json_encode форматирует массив в javascript для внутреннего синтаксиса – массив, вероятно, будет выглядеть как «cat», «dog» ','летучая мышь] )

Затем вы можете получить значения из массива JavaScript так:

 <script> console.log(myarray[2]); </script> 

Ваш PHP-код выполняется перед вашим Javascript, поэтому не имеет смысла использовать его таким образом.

Вместо этого вы должны сделать что-то вроде этого:

 <?php for ($i=0;$i<48;$i++):?> name[<?php echo $i;?>] = "<?php echo giveJS();?>"; <?php endfor; ?> 

На самом деле, если ваш PHP такой простой, вам не нужна функция:

 <?php foreach ($names as $i=>$name):?> name[<?php echo $i;?>] = "<?php echo $name;?>"; <?php endforeah;?> 

В обоих случаях у вас будет такой Javascript:

 name[0] = 'name0'; name[1] = 'name1'; ... name[47] = 'name47'; 

Это распространенная ошибка для людей, начинающих веб-разработку. Важно понять, что весь ваш PHP-код работает до запуска javascript *. Если вы посмотрите на javascript, который попадает в браузер, вы увидите

  var names = new Array(); for(var i = 0; i < 48; i++) { names[i] = "foo"; } 

что объясняет, почему каждый элемент один и тот же. Хороший способ сделать это – использовать json_encode в PHP, чтобы просто передать массив в переменную JS. Как это:

var names=<?php echo json_encode($names);?>;

* Для людей, которые пишут комментарии о Javascript, работающие одновременно с PHP, либо запустив JS раньше, либо используя AJAX, да, я знаю, но для новичка модель PHP полностью генерирует, тогда запуск JS проще, понимать.

Предположим, что $names[1]"Bob" ..

Ваш PHP-скрипт будет запущен на сервере , выводя следующий JavaScript:

 var names = new Array(); for(var i = 0; i < 48; i++) { names[i] = "Bob"; } 

который, в свою очередь, будет запущен в вашем браузере (клиенте), создавая names массивов с 48 элементами "Bob" .


Между PHP и JavaScript нет простой беседы. Либо (1) ваш PHP-скрипт выводит все, что JavaScript должен знать с самого начала, либо (2) вы общаетесь с сервером при необходимости с помощью AJAX .

В вашем случае JSONEncode , вероятно, является лучшим решением, поскольку он выведет массив в JavaScript Object Notation , устраняя необходимость инициализации на основе цикла.

Зависит от того, сколько измерений имеет ваш массив. SHortest для простого массива:

  var names = new Array(<?php echo implode(',', $php_array);?>); 

Я думаю, что json_encode() – это то, что вы ищете.

пример

 <?php $myArray = array('generating', 'some', 'items'); ?> <script type="text/javascript> var myArray = <?= json_encode($myArray); ?>; </script>