tags:

views:

379

answers:

5

I have to create a javascript array whose elements are fetched by php from a database. Is it possible? If so, how?

(I dont want to use ajax to do that)

+1  A: 

If you can loop through the database contents, creating an array is simple:

echo "var myArray = [";

Loop through array here and add commas to separate values.

echo "];";

Your myArray variable will be available client-side. It should look something like:

var myArray = [1, 3, 2, 4];

Alternatively and to avoid an extra comma due to loop-based string concatenation, you can write the variable to the client as follows:

echo "var myArray = [];"

...and do the following for each data row:

echo "myArray.push($db_data);"

This is effective, though not quite as clean as the previous approach. You will end up with code similar to the following:

var myArray = [];

myArray.push(3);
myArray.push(5);
myArray.push(1);

alert(myArray); // will display "3, 5, 1"

My apologies for not being too familiar with PHP, but this is something that can be done with any server-side language.

David Andres
right you are !
Here Be Wolves
A: 

Try using JSON.

Traveling Tech Guy
Short answer, but not incorrect. PHP has an encode_json function, which is pretty easy to decode in JS...
Mark
you don't have to decode it, since it's actual Javascript code. If you're reading it in an AJAX setting, then yeah, you have to parse it yourself, but not in this case.
nickf
sorry for the short answer - was typing it on the road (but still managed to include a link :)). JSON is the easiest way to pass info to JS. Encoding JSON in PHP is easy (make sure JSON is enabled on your server). And then, as @mark said, call json_encode in PHP and JSON.Parse in JS.
Traveling Tech Guy
+3  A: 

Answer 1: yes, it can be done.

Answer 2: Here's how:

$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 ;";

Cheers!

Here Be Wolves
I'm no php guy, but doesn't this add an extra comma to the array?
Kobi
@Kobi: It will, but the JavaScript engine won't complain. If you alert the contents of array [a, b, c,] to the screen with alert([1, 2, 3,]) the text "a, b, c," will be shown.
David Andres
@Kobi: Actually, on closer inspection the line $js_array{strlen($js_array) - 1} = ']'; probably overwrites that last comma.
David Andres
@David: firefox complains.
nickf
+3  A: 

Collect the values in an array and convert it to JSON with json_encode:

$array = array();
while ($row = mysql_fetch_assoc($result)) {
    $array[] = $row['key'];
}
echo 'var array = '.json_encode($array).';';
Gumbo
+1  A: 
<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>
Sadat