так что я полный 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>