2010-11-19 10 views
1

latとlngの配列をPHPスクリプトに渡して、スクリプトが.txtファイルに保存できるようにしようとしています。javascriptからPHPに配列を渡す際にエラーが発生する

私の配列をシリアル化して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を(アンシリアライズしてファイルに貼り付ける):ALL YOUR HELP FOR

$data = $_POST['y']; 

$arr = unserialize($data); 

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

感謝を! :D

答えて

4
  1. Reinvent wheels much? :)明示的にはこの目的のために既にJSONがあります.JSONのエンコードとデコードのためのライブラリもあります。 PHPにはjson_decodeが付属しています。
  2. ファイルに書き込むとき、$value自体は配列です。配列が文字列にキャストされるとき(出力のために必要)、it'll be cast to the string "Array"join(',', $value)を使用して、配列のすべての値をコンマで区切って出力します。
+0

ああ、参加( '、' $ value)本当に助けてください!! ..ありがとう! :) – Dayzza

+0

@Jonathanところで、あなたのJSは実際にJSONでエンコーディングされているようですが、PHPはJSONを理解できないはずの 'unserialize'を使ってシリアル化しています。 – deceze

+0

hmmmそれについてはわかりませんが、unserializeを使用すると、配列から値を取得できます。 – Dayzza

関連する問題