function SectionArray ()
{
section = new Array();
<?
$result = mysql_query("SELECT * FROM discipline_section_tbl WHERE id_discipline=$id");
$i = 0;
while ($row = mysql_fetch_object($result))
{
echo "section [$i][0]= $row->id;\n";
echo "section [$i][1]= '$row->title';";
$i++;
}
?>
}
Как передать двумерный массив из PHP в JavaScript
Есть три формы (select), содержимое которых изменяется взависимости от выбора предыдущих (первая статическая), причём выборка последующих происходит через запрос к базе мускуль.
в массиве явескрипт нужны 2 поля (id и title) - соответственно получается двумерный массив (кроме первого), как их передать?
не знаю правильно - нет сделал, может идея правильная, но где-то мелкие ошибки???
Код:
function SectionArray (<?$id?>)
{
section = newArray
("<?
$result = mysql_query("SELECT * FROM discipline_section_tbl WHERE id_discipline=$id");
while ($row = mysql_fetch_array($result))
{
?>
section =<?echo $row["id"];?>
section [j]=<?echo $row["title"];
}
?>")
}
{
section = newArray
("<?
$result = mysql_query("SELECT * FROM discipline_section_tbl WHERE id_discipline=$id");
while ($row = mysql_fetch_array($result))
{
?>
section =<?echo $row["id"];?>
section [j]=<?echo $row["title"];
}
?>")
}
подскажите плиз, а то мозг уже кипит.... :o
Код:
Выглядит жутковато...
Я не тестировал - проверь сам.
Можешь также глянуть в сторону неплохой функции json_encode()
http://ru2.php.net/manual/ru/function.json-encode.php
Только перед ее употреблением проверь ее наличие в твоем РНР интерпретаторе.
сделал массив из одного элемента:
Код:
sections = new Array();
<?
$result = mysql_query("SELECT * FROM discipline_section_tbl");
$i = 0;
$row = mysql_fetch_object($result);
echo "section [$i] = $row->id;\n";
?>
<?
$result = mysql_query("SELECT * FROM discipline_section_tbl");
$i = 0;
$row = mysql_fetch_object($result);
echo "section [$i] = $row->id;\n";
?>
есть такая функция:
Код:
function createMenus()
{
for (var i=0; i<5;i++ )
{
document.Menu.section.options.text=sections;
}
}
{
for (var i=0; i<5;i++ )
{
document.Menu.section.options.text=sections;
}
}
запускаю функцию:
Код:
<body onLoad="createMenus()">
и пытаюсь вывести массив:
Код:
<form name="Menu">
<select name="section">
<option></option>
</select>
<select name="section">
<option></option>
</select>
пример взял отсюда: http://www.javaportal.ru/javascript/examples/dynamicmenu.html
А разве в ЖС так вот сразу создаются элементы произвольной глубины многомерного массива? Как там по докам - не помню, но у меня никогда не получалось, поэтому приходилось записывать как:
Код:
//...................
while ($row = mysql_fetch_object($result))
{
// !!! Новый вложенный массив многомерки
// ++++++++++++++++
echo "section [$i] = new Array();\n";
// --------------------
echo "section [$i][0]= $row->id;\n";
echo "section [$i][1]= '$row->title';";
$i++;
}
while ($row = mysql_fetch_object($result))
{
// !!! Новый вложенный массив многомерки
// ++++++++++++++++
echo "section [$i] = new Array();\n";
// --------------------
echo "section [$i][0]= $row->id;\n";
echo "section [$i][1]= '$row->title';";
$i++;
}
Вот дернул кусок кода из движка Sajax, который преобразовывает переменные, массивы и объекты РНР в JSON строки. Написано не очень красиво, но работает. Повторюсь - это кусок кода либы, писал ее не я.
Код:
//
// Helper function to return an eval()-usable representation
// of an object in JavaScript.
//
function sajax_get_js_repr($value) {
$type = gettype($value);
if ($type == "boolean") {
return ($value) ? "Boolean(true)" : "Boolean(false)";
}
elseif ($type == "integer") {
return "parseInt($value)";
}
elseif ($type == "double") {
return "parseFloat($value)";
}
elseif ($type == "array" || $type == "object" ) {
//
// XXX Arrays with non-numeric indices are not
// permitted according to ECMAScript, yet everyone
// uses them.. We'll use an object.
//
$s = "{ ";
if ($type == "object") {
$value = get_object_vars($value);
}
foreach ($value as $k=>$v) {
$esc_key = sajax_esc($k);
if (is_numeric($k))
$s .= "$k: " . sajax_get_js_repr($v) . ", ";
else
$s .= "\"$esc_key\": " . sajax_get_js_repr($v) . ", ";
}
if (count($value))
$s = substr($s, 0, -2);
return $s . " }";
}
else {
$esc_val = sajax_esc($value);
$s = "'$esc_val'";
return $s;
}
}
// Helper function to return an eval()-usable representation
// of an object in JavaScript.
//
function sajax_get_js_repr($value) {
$type = gettype($value);
if ($type == "boolean") {
return ($value) ? "Boolean(true)" : "Boolean(false)";
}
elseif ($type == "integer") {
return "parseInt($value)";
}
elseif ($type == "double") {
return "parseFloat($value)";
}
elseif ($type == "array" || $type == "object" ) {
//
// XXX Arrays with non-numeric indices are not
// permitted according to ECMAScript, yet everyone
// uses them.. We'll use an object.
//
$s = "{ ";
if ($type == "object") {
$value = get_object_vars($value);
}
foreach ($value as $k=>$v) {
$esc_key = sajax_esc($k);
if (is_numeric($k))
$s .= "$k: " . sajax_get_js_repr($v) . ", ";
else
$s .= "\"$esc_key\": " . sajax_get_js_repr($v) . ", ";
}
if (count($value))
$s = substr($s, 0, -2);
return $s . " }";
}
else {
$esc_val = sajax_esc($value);
$s = "'$esc_val'";
return $s;
}
}
посмотрите мой пост, в чём ошибка???
Мой пример может и не правилен, но пашет. В JS я не силен
Код:
<script language="JavaScript">
sections = new Array();
<?
$result = mysql_query("SELECT * FROM discipline_section_tbl");
for($i=0;$row = mysql_fetch_array($result);$i++) {
echo "sections[$i] = {$row['id']};";
}
echo("count=".mysql_num_rows($result).";");
?>
function createMenus()
{
for (var i=0; i<count;i++) {
option=document.createElement("option");
text=document.createTextNode(sections);
option.appendChild(text);
document.getElementById("section").appendChild(option);
}
}
</script>
<body onLoad="createMenus()">
<form>
<select id="section"></select>
</form>
......................
sections = new Array();
<?
$result = mysql_query("SELECT * FROM discipline_section_tbl");
for($i=0;$row = mysql_fetch_array($result);$i++) {
echo "sections[$i] = {$row['id']};";
}
echo("count=".mysql_num_rows($result).";");
?>
function createMenus()
{
for (var i=0; i<count;i++) {
option=document.createElement("option");
text=document.createTextNode(sections);
option.appendChild(text);
document.getElementById("section").appendChild(option);
}
}
</script>
<body onLoad="createMenus()">
<form>
<select id="section"></select>
</form>
......................
Вот. Функция JS должна пахать. Остально может выдаст ошибку, пока я на цикл переписывал. Вот...