【问题标题】:Parsing javascript arrays in PHP在 PHP 中解析 javascript 数组
【发布时间】:2011-04-22 15:04:56
【问题描述】:

我似乎不知道如何将 JS 数组导入 PHP。

我必须处理的内容如下所示:

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,谷歌只返回一些奇怪的方式来使用 serialize() 和来自 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;
?>

【问题讨论】:

  • 您是否要将该数组复制/粘贴到 PHP 中?通常,您发送到 PHP 的任何 JS 数组都将以一种或另一种形式序列化。你能举个例子说明你是如何使用它的吗?
  • 一个 cron 作业(不在我的控制之下)抓取它并将其保存为 example.js。它每小时都在变化,我只是将它读入 PHP,然后尝试解析它。它基本上显示为纯文本文件,我只能使用 PHP(或 bash)
  • 你可以试试这个:var_dump(json_decode($arrLow));其中 $arrLow 是从 javascript 发送的,通常以表单或 AJAX 发送。

标签: php javascript arrays


【解决方案1】:

您可以为此使用json_decode()。诀窍是留下var arrLow = 部分(这样就只剩下数组本身了)。您可以将值分配给 php 变量$arrLow,如下所示:

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

删除开头的快速'n'dirty hack是使用strstr()函数。

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

【讨论】:

  • strstr() 或 str_replace() 哪个更快?只是好奇。
  • 我不确定,但我猜strstr() 应该更快。我无法确认,但 php.net 上有人发现 strstr() 比表达式 strpos() !== false (ch2.php.net/manual/en/function.strstr.php#39236) 快。如果这是真的,它可能比str_replace() 快得多。
  • 好的,已更新为使用 strstr。非常感谢您的帮助,非常感谢。没想到这么简单..
【解决方案2】:

2 个选项:

  1. 只需删除前面的var arrLow =(如果它的变量可能需要正则表达式),然后解析为json。
  2. javascript parsing上全力以赴

【讨论】:

    【解决方案3】:

    根据JSONLint 验证器,这是有效的JSON(没有var arrLow =)。所以任何好的json_decode() 实现都应该可以解决问题。也许您正在使用的实现有一定的局限性? JSON.org 网站有一个简洁的list of links to implementations of json_decode in PHP(还有很多其他语言)。您一定能找到一种行之有效的方法。

    【讨论】:

      【解决方案4】:
      //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);        
      

      【讨论】:

        猜你喜欢
        • 2013-04-13
        • 2011-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-04
        • 2012-06-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多