2010-11-19 5 views
1

J'essaie de transmettre mon tableau lat et lng à mon script PHP afin que le script puisse l'enregistrer dans un fichier .txt.Erreur lors du passage de javascript à PHP

Je parviens à sérialiser mon tableau et le passer au script php ... et du côté php, je parviens à le désérialiser. Cependant, lorsque j'écris le tableau dans le fichier, le fichier ne s'affiche que comme "tableau array array" ... et non la valeur ... supposé être "(1.3567, 103.124252) (1.3543, 103.436435)".

Ci-dessous est mon exemple de code (à sérialisation):

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 (à unserialize et coller un fichier):

$data = $_POST['y']; 

$arr = unserialize($data); 

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

MERCI pour votre aide! : D

Répondre

4
  1. Réinventez beaucoup les roues? :) Il y a déjà JSON expressément pour cela, et il y a une tonne de bibliothèques pour coder et décoder JSON dans n'importe quelle langue. PHP est livré avec json_decode.
  2. Lors de l'écriture dans le fichier, $value lui-même est un tableau. Lorsqu'un tableau est converti en chaîne (comme nécessaire pour la sortie), it'll be cast to the string "Array". Utilisez join(',', $value) pour afficher toutes les valeurs du tableau séparées par des virgules.
+0

oh la jointure ('' valeur $) aide vraiment !! .. Merci beaucoup !! :) – Dayzza

+0

BTW @ Jonathan, il semble que votre JS encode fait en JSON, mais PHP est Désérialisation en utilisant 'unserialize', qui ne devrait pas être en mesure de comprendre JSON ...?! – deceze

+0

hmmm pas sûr à ce sujet .. mais l'utilisation de unserialize parvient à extraire la valeur du tableau. – Dayzza

Questions connexes