2010-10-07 53 views
7

Tôi dường như không thể tìm ra cách để có được một mảng JS thành PHP.Phân tích cú pháp các mảng javascript trong PHP

Những gì tôi phải làm việc với ngoại hình như thế này:

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 và những người khác chỉ trả lại NULL, google chỉ trả về một số cách kỳ lạ để sử dụng serialize() với một HTTP POST từ một trình duyệt JS-hiểu biết mà thực sự không thể làm việc ở đây

có ai có bất kỳ đầu mối như thế nào: x

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

chỉnh sửa: Cảm ơn các bạn! Didnt biết nó rất dễ dàng

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

Bạn đang cố gắng sao chép/dán mảng đó vào PHP? Nói chung, bất kỳ mảng JS nào mà bạn gửi tới PHP sẽ được tuần tự hóa dưới dạng này hay dạng khác. Bạn có thể đưa ra một ví dụ về cách bạn đang cố gắng sử dụng nó? – mway

+0

Một công việc cron (không thuộc quyền kiểm soát của tôi) lấy nó và lưu nó như example.js. Nó thay đổi mỗi giờ, và tôi chỉ đọc nó vào PHP sau đó cố gắng phân tích nó. Về cơ bản nó xuất hiện dưới dạng tệp văn bản thuần túy và tôi chỉ có thể làm việc với PHP (hoặc bash) – jen

+0

bạn có thể thử điều này: var_dump (json_decode ($ arrLow)); trong đó $ arrLow được gửi từ javascript, thông thường dưới dạng hoặc bằng AJAX. –

Trả lời

8

Bạn có thể sử dụng json_decode() cho việc này. Bí quyết là để lại phần var arrLow = (để chỉ mảng chính nó còn lại). Bạn có thể gán giá trị cho biến php $arrLow như thế này:

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

Một quick'n'dirty hack để loại bỏ ngay từ đầu sẽ được sử dụng các chức năng strstr().

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

Điều gì sẽ nhanh hơn, strstr() hoặc str_replace()? Chỉ tò mò thôi. – jen

+0

Tôi không biết chắc chắn, nhưng tôi đoán 'strstr()' nên nhanh hơn. Tôi không thể xác nhận nó, nhưng ai đó trên php.net thấy rằng 'strstr()' là nhanh hơn so với biểu thức 'strpos()! == false' (http://ch2.php.net/manual/en/function .strstr.php # 39236). Nếu đó là sự thật, nó có lẽ là cách nhanh hơn 'str_replace()'. – svens

+0

Được rồi, được cập nhật để sử dụng strstr. Cảm ơn rất nhiều sự giúp đỡ của bạn, thực sự đánh giá cao nó. Không nghĩ rằng nó dễ dàng như vậy .. – jen

1

2 lựa chọn:

  1. Chỉ cần loại bỏ các var arrLow = ở phía trước (có thể cần một regex nếu biến của nó), và phân tích như json.
  2. Go cho đầy đủ về javascript parsing
0

Theo JSONLint validator đây là JSON hợp lệ (không có var arrLow =). Vì vậy, bất kỳ thực hiện tốt json_decode() nào cũng nên thực hiện thủ thuật. Có lẽ việc thực hiện bạn đang sử dụng có những hạn chế nhất định? Trang web JSON.org có một số list of links to implementations of json_decode in PHP gọn gàng (và nhiều ngôn ngữ khác nữa). Bạn có thể chắc chắn để tìm một trong đó không hoạt động.

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);   
Các vấn đề liên quan