2010-10-07 24 views
7

我似乎无法弄清楚如何获得一个JS数组到PHP中。在PHP中解析javascript数组

我有看起来像这样的工作:

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和其他人只是返回NULL,Google只返回使用序列化()与来自JS-理解浏览器中的HTTP POST一些奇怪的方式,也真的不能在这里工作

没有人有多么任何线索:X

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

编辑:谢谢你们!不知道它是那么容易

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

您是否试图将该数组复制/粘贴到PHP中?通常,您发送给PHP的任何JS数组都将以一种或另一种形式进行序列化。你能举一个你如何使用它的例子吗? – mway 2010-10-07 22:29:50

+0

cron作业(不在我的控制下)抓取并保存为example.js。它每小时都在变化,我只是读到PHP然后试图解析它。它基本上显示为一个纯文本文件,我只能使用PHP(或bash) – jen 2010-10-07 22:33:07

+0

你可以试试这个:var_dump(json_decode($ arrLow));其中$ arrLow是从JavaScript发送的,通常以表单或AJAX的形式发送。 – 2010-10-07 22:33:37

回答

8

您可以使用json_decode()这一点。诀窍是放弃var arrLow =部分(以便只剩下阵列本身)。您可以分配值到PHP变量$arrLow这样的:

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

一个quick'n'dirty黑客删除开始将使用strstr()功能。

$js = strstr('var arrLow = [ {..', '['); 
+0

什么会更快,strstr()或str_replace()?只是好奇。 – jen 2010-10-07 22:44:20

+0

我不知道,但我猜'strstr()'应该更快。我无法确认,但php.net上的某个人发现'strstr()'比表达式'strpos()!== false'更快(http://ch2.php.net/manual/en/function .strstr.php#39236)。如果这是真的,它可能比'str_replace()'快。 – svens 2010-10-07 22:49:24

+0

好的,更新为使用strstr。非常感谢您的帮助,非常感谢。没想到这很容易.. – jen 2010-10-07 22:51:30

1

2个选择:

  1. 只需卸下var arrLow =在前面(可能需要如果它的可变正则表达式),并解析为JSON。
  2. ,采用完全对javascript parsing
0
//define javascript array 
>var mainArray = {};  
>  // inner loops 
mainArraySub['XXX'] = [];  

      mainArray = JSON.stringify(mainArray); 
     passing javascript array content in jquery ajax request as 
     $.ajax({ 
     type: "POST", 
    data:{paramval:mainArray}, 
    dataType: "json", 
    url: url, 
    success: function(msg){ 

      } 
     });  


in POST request you will get as below 

{"row1":{"0":{"nnnn":"aaaa"},"1":{"Movie":"aaaa"},...}   

// in a.php file call as below 

$Info = $_REQUEST['rowdata']; 
$tre = json_decode(stripslashes($Info),true); 
var_dump($tre);