【问题标题】:Error in Passing array from javascript to PHP将数组从 javascript 传递到 PHP 时出错
【发布时间】:2011-05-12 10:18:47
【问题描述】:

我正在尝试将我的 lat 和 lng 数组传递给我的 PHP 脚本,以便脚本可以将其保存到 .txt 文件中。

我设法序列化我的数组并将其传递给 php 脚本...在 php 方面,我设法取消序列化它。但是,当我将数组写入文件时,文件仅显示为“数组数组数组”......而不是值......假设为“(1.3567,103.124252)(1.3543,103.436435)”。

以下是我的示例代码(用于序列化):

function serialize(mixed_value) 
   { 
    var _getType = function( inp ) {
    var type = typeof inp, match;
    var key;
    if (type == 'object' && !inp) {
     return 'null';
    }
    if (type == "object") {
     if (!inp.constructor) {
      return 'object';
     }
     var cons = inp.constructor.toString();
     match = cons.match(/(\w+)\(/);
     if (match) {
      cons = match[1].toLowerCase();
     }
     var types = ["boolean", "number", "string", "array"];
     for (key in types) {
      if (cons == types[key]) {
       type = types[key];
       break;
      }
     }
    }
    return type;
   };
   var type = _getType(mixed_value);
   var val, ktype = '';

   switch (type) {
    case "function": 
     val = ""; 
     break;
    case "undefined":
     val = "N";
     break;
    case "boolean":
     val = "b:" + (mixed_value ? "1" : "0");
     break;
    case "number":
     val = (Math.round(mixed_value) == mixed_value ? "i" : "d") + ":" + mixed_value;
     break;
    case "string":
     val = "s:" + mixed_value.length + ":\"" + mixed_value + "\"";
     break;
    case "array":
    case "object":
     val = "a";
     var count = 0;
     var vals = "";
     var okey;
     var key;
     for (key in mixed_value) {
      ktype = _getType(mixed_value[key]);
      if (ktype == "function") { 
       continue; 
      }

      okey = (key.match(/^[0-9]+$/) ? parseInt(key, 10) : key);
      vals += serialize(okey) +
        serialize(mixed_value[key]);
      count++;
     }
     val += ":" + count + ":{" + vals + "}";
     break;
   }
   if (type != "object" && type != "array") {
     val += ";";
    }
   return val;
   }

PHP(反序列化并粘贴到文件):

$data = $_POST['y'];

$arr = unserialize($data); 

$fp=fopen("route.txt","w+");
foreach($arr as $key => $value){
fwrite($fp,$value."\t");
}

感谢您的帮助! :D

【问题讨论】:

    标签: php javascript arrays serialization


    【解决方案1】:
    1. 重新发明轮子? :) 已经有 JSON 专门用于此目的,并且有大量的库可以用几乎任何语言对 JSON 进行编码和解码。 PHP自带json_decode
    2. 写入文件时,$value 本身就是一个数组。当一个数组被转换为一个字符串时(输出它是必要的),it'll be cast to the string "Array"。使用join(',', $value) 输出以逗号分隔的数组的所有值。

    【讨论】:

    • 哦,join(',' $value) 真的很有帮助!!.. 非常感谢!! :)
    • @Jonathan BTW,看来您的 JS 实际上是用 JSON 编码,但 PHP 正在使用 unserialize 进行反序列化,它应该无法理解 JSON...?!
    • hmmm 不确定.. 但使用反序列化管理从数组中获取值。
    猜你喜欢
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 2014-02-18
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    相关资源
    最近更新 更多