2010-11-19 9 views
1

Ich versuche, mein Array von lat und lng an mein PHP-Skript zu übergeben, damit das Skript es in einer .txt-Datei speichern kann.Fehler beim Übergeben des Arrays von Javascript zu PHP

ich meine Serialisierung zu serialisieren und es an das PHP-Skript übergeben ... und auf der PHP-Seite, es gelingt mir, es zu deserialisieren. Wenn ich jedoch das Array in die Datei schreibe, wird die Datei nur als "Array Array Array" angezeigt ... und nicht als Wert ... angenommen "(1.3567, 103.124252) (1.3543, 103.436435)".

unter meinem Beispielcode ist (serialisiert):

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 (deserialisieren und Datei einfügen):

$data = $_POST['y']; 

$arr = unserialize($data); 

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

Vielen Dank für Ihre Hilfe! : D

Antwort

4
  1. Räder neu erfinden viel? :) Es gibt bereits JSON für ausdrücklich diesen Zweck, und es gibt eine Tonne von Bibliotheken für JEON in fast jeder Sprache en- und entschlüsseln. PHP kommt mit json_decode.
  2. Beim Schreiben in die Datei ist $value selbst ein Array. Wenn ein Array in eine Zeichenfolge umgewandelt wird (wie für die Ausgabe erforderlich), it'll be cast to the string "Array". Verwenden Sie join(',', $value), um alle Werte des Arrays getrennt durch Kommas auszugeben.
+0

oh die Join (', $ Wert) wirklich helfen !! .. Vielen Dank !! :) – Dayzza

+0

@ Jonathan BTW, es scheint, dass Ihre JS ist tatsächlich in JSON Codierung, aber PHP ist unserializing mit 'unserialize', die nicht in der Lage sein soll, JSON zu verstehen ...?! – deceze

+0

hmmm nicht sicher darüber .. aber mit unserialize verwalten, um den Wert aus dem Array zu bekommen. – Dayzza

Verwandte Themen