php
  • javascript
  • arrays
  • 2010-10-07 32 views 7 likes 
    7

    Parece que no puedo entender cómo obtener una matriz JS en PHP.Analizando javascript arrays en PHP

    Lo que tengo que trabajar con el siguiente aspecto:

    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 y otros simplemente devuelve NULL, Google sólo alguna extraña manera de utilizar serialize() con un HTTP POST desde un navegador JS-comprensión, que realmente no puede trabajar aquí

    ¿alguien tiene alguna idea de cómo: x

    ============================ =========================

    editar: ¡Gracias chicos! No sabía que era tan fácil

    <?php 
    $json = file_get_contents('24d29b1c099a719zr8f32ce219489cee.js'); 
    $json = str_replace('var arrLow = ','' ,$json); 
    $data = json_decode($json); 
    echo $data[0]->e; 
    ?> 
    
    +0

    ¿Está tratando de copiar/pegar esa matriz en PHP? En general, cualquier matriz JS que envíe a PHP se serializará de una forma u otra. ¿Puedes dar un ejemplo de cómo estás tratando de usarlo? – mway

    +0

    Un trabajo cron (que no está bajo mi control) lo toma y lo guarda como example.js. Cambia cada hora, y simplemente lo leo en PHP y luego intento analizarlo. Básicamente aparece como un archivo de texto plano, y solo puedo trabajar con PHP (o bash) – jen

    +0

    , puedes probar esto: var_dump (json_decode ($ arrLow)); donde $ arrLow se envía desde javascript, normalmente en forma o por AJAX. –

    Respuesta

    8

    Puede usar json_decode() para esto. El truco es dejar la parte var arrLow = (de modo que solo quede la matriz). Puede asignar el valor a la variable php $arrLow así:

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

    Un truco quick'n'dirty para eliminar el principio sería el uso de la función strstr().

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

    ¿Qué sería más rápido, strstr() o str_replace()? Sólo curioso. – jen

    +0

    No lo sé con certeza, pero supongo que 'strstr()' debería ser más rápido. No puedo confirmarlo, pero alguien en php.net descubrió que 'strstr()' es más rápido que la expresión 'strpos()! == false' (http://ch2.php.net/manual/en/function .strstr.php # 39236). Si eso es cierto, es probablemente mucho más rápido que 'str_replace()'. – svens

    +0

    Bien, actualizado para usar strstr. Muchas gracias por su ayuda, realmente lo aprecio. No pensé que fuera tan fácil ... – jen

    1

    2 opciones:

    1. Basta con retirar la var arrLow = en la parte delantera (puede ser que necesite una expresión regular si su variable), y analizar como JSON.
    2. Ir para encender a plena javascript parsing
    0

    De acuerdo con el validador JSONLint esto es JSON válida (sin el var arrLow =). Entonces, cualquier buena implementación de json_decode() debería hacer el truco. ¿Tal vez la implementación que está utilizando tiene ciertas limitaciones? El sitio web JSON.org tiene un ordenado list of links to implementations of json_decode in PHP (y muchos otros idiomas también). Puede estar seguro de encontrar uno que funcione.

    0
    //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);   
    
    Cuestiones relacionadas