Мне нужно создать массив javascript, элементы которого извлекаются php из базы данных. Является ли это возможным? Если да, то как?
(Я не хочу использовать ajax для этого)
Соберите значения в массиве и преобразуйте его в JSON с помощью json_encode
:
$array = array(); while ($row = mysql_fetch_assoc($result)) { $array[] = $row['key']; } echo 'var array = '.json_encode($array).';';
Ответ 1: да, это можно сделать.
Ответ 2: Вот как это сделать:
$js_array = "["; $result = mysql_query("some query of yours"); while( $row=mysql_fetch_array($result, MYSQL_NUM) ) { $js_array .= $row[0]; // assuming you just want the first field // of each row in the array $js_array .= ","; } $js_array{ strlen($js_array)-1 } = ']'; echo "var db_array = $js_array ;";
Ура!
<script language="javascript1.2"> var arr = new array(<?php $result = mysql_query("select .... "); $count = mysql_num_rows($result); if($count>0){ for( $i=0;$i<$count-1;$i++) { $row = mysql_fetch_row($result); echo $row[0],','; } $row = mysql_fetch_row($result); echo $row[0],','; } ?>); </script>
Если вы можете прокручивать содержимое базы данных, создание массива прост:
echo "var myArray = [";
Перемещайтесь через массив здесь и добавьте запятые для разделения значений.
echo "];";
Ваша переменная myArray будет доступна на стороне клиента. Он должен выглядеть примерно так:
var myArray = [1, 3, 2, 4];
Альтернативно, и чтобы избежать дополнительной запятой из-за конкатенации строк на основе цикла, вы можете написать переменную клиенту следующим образом:
echo "var myArray = [];"
… и для каждой строки данных выполните следующие действия:
echo "myArray.push($db_data);"
Это эффективно, хотя и не так чисто, как предыдущий подход. Вы получите код, похожий на следующий:
var myArray = []; myArray.push(3); myArray.push(5); myArray.push(1); alert(myArray); // will display "3, 5, 1"
Мои извинения за то, что я не слишком хорошо знаком с PHP, но это то, что можно сделать на любом серверном языке.
Вот решение, которое правильно относится к одинарным кавычкам в данных:
Сначала извлекайте данные базы данных, например, с помощью функций mysqli_ :
$result = mysqli_query($con, $sql); if (!$result) die(); // error handling comes here $array = mysqli_fetch_all($result, MYSQLI_ASSOC);
Затем преобразуйте его в JSON, выйдите из одиночных кавычек и выведите JavaScript:
$output = str_replace("'", "\'", json_encode($array)); echo "var array = '$output';";
Обратите внимание, что json_encode
обратную косую черту (как следует), удваивая их. И это нормально, что он не избегает одиночных кавычек, поскольку он не может знать контекст, в который мы его помещаем. Поэтому, когда мы вводим его в JavaScript, обертывая его в одинарные кавычки, мы также отвечаем за исключение кавычек.