2010-10-07 19 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);