views:

46

answers:

3

I can't seem to figure out how to get a JS array into PHP.

What I have to work with looks like this:

var arrLow = [
{
"e": "495864",
"rank": "8678591",
"rankmove": "<p><img src='up.php?uStyle=144'> UP 495864"
},
{
"e": "104956",
"rank": "-",
"rankmove": "<p><img src='up.php?uStyle=145'> DOWN 1"
},
{
"e": "0",
"rank": "0",
"rankmove": "<p><img src='up.php?uStyle=975'> NEW"
}
]

json_decode and others just return NULL, google only returns some strange way to use serialize() with a HTTP POST from a JS-understanding browser which really can't work here

Does anyone have any clue how :x

==========================================================================

edit: Thanks guys! Didnt know it was so easy

<?php 
$json = file_get_contents('24d29b1c099a719zr8f32ce219489cee.js');
$json = str_replace('var arrLow = ','' ,$json);
$data = json_decode($json);
echo $data[0]->e;
?>
+4  A: 

You can use json_decode() for this. The trick is to leave away the var arrLow = part (so that only the array itself is left). You can assign the value to the php variable $arrLowlike this:

$js = '[ {"e" : "495864", ...';
$arrLow = json_decode($js);

A quick'n'dirty hack to remove the beginning would be to use the strstr() function.

$js = strstr('var arrLow = [ {..', '[');
svens
What would be faster, strstr() or str_replace()? Just curious.
jen
I don't know for sure, but I guess `strstr()` should be faster. I can't confirm it, but someone on php.net found that `strstr()` is faster than the expression `strpos() !== false` (http://ch2.php.net/manual/en/function.strstr.php#39236). If that's true, it's probably way faster than `str_replace()`.
svens
Alright, updated to use strstr. Thanks a lot for your help, really appreciate it. Didn't think it was so easy..
jen
+1  A: 

2 options:

  1. Just remove the var arrLow = at the front (might need a regex if its variable), and parse as json.
  2. Go for full on javascript parsing
Wrikken
A: 

According to the JSONLint validator this is valid JSON (without the var arrLow =). So any good json_decode() implementation should do the trick. Maybe the implementation you are using has certain limitations? The JSON.org website has a neat list of links to implementations of json_decode in PHP (and lots of other languages too). You can be sure to find one that does work.

littlegreen