Converti array php in Javascript


185

Come posso convertire un array PHP in un formato come questo

Array
(
    [0] => 001-1234567
    [1] => 1234567
    [2] => 12345678
    [3] => 12345678
    [4] => 12345678
    [5] => AP1W3242
    [6] => AP7X1234
    [7] => AS1234
    [8] => MH9Z2324
    [9] => MX1234
    [10] => TN1A3242
    [11] => ZZ1234
)

a un array Javascript nel formato seguente?

var cities = [
    "Aberdeen",
    "Ada",
    "Adamsville",
    "Addyston",
    "Adelphi",
    "Adena",
    "Adrian",
    "Akron",
    "Albany"
];

3
Puoi chiarire la tua domanda? Stai davvero cercando di creare un array JavaScript o stai cercando di creare una stringa che puoi inserire in un scripttag che lo creerà, oppure stai cercando di creare JSON per rispedire in risposta a una richiesta Ajax, oppure ... (Inoltre, vale la pena controllare la casella Come formattare sul lato destro quando si pone la domanda e la pagina collegata dal [?] Appena sopra l'area della domanda.)
TJ Crowder

Risposte:


60

La risposta di Spudley va bene .

Avviso di sicurezza: quanto segue non dovrebbe essere più necessario per te

Se non hai PHP 5.2 puoi usare qualcosa del genere:

function js_str($s)
{
    return '"' . addcslashes($s, "\0..\37\"\\") . '"';
}

function js_array($array)
{
    $temp = array_map('js_str', $array);
    return '[' . implode(',', $temp) . ']';
}

echo 'var cities = ', js_array($php_cities_array), ';';

2
concordato: se stai utilizzando un vecchio PHP, dovrai scriverne uno tuo. Tuttavia, dovresti anche considerare di aggiornare il tuo PHP, se possibile!
Spudley,

5
Anche se stai usando il vecchio PHP, non scrivere il tuo, prendi una libreria esistente che è gestita / utilizzata da più di una persona / progetto. Quindi questa risposta sta solo mostrando come si potrebbe fare qualcosa, ma non dovrebbe raccomandarlo, indipendentemente dalla versione di PHP. Ad esempio pear.php.net/package/Services_JSON
hakre,

Hai ragione. Tuttavia, il codice sopra è stato usato / testato per anni in due grandi progetti.
Udo G,

1
A proposito, hai aggiunto la chiamata array_map. E, onestamente, non è necessario modificare una risposta perfettamente valida alla domanda originale e contrassegnarla con un "Avviso di sicurezza" quando non presenta problemi di sicurezza.
Udo G,

1
@UdoG: se non sei d'accordo con una modifica, sei libero di modificarla di nuovo da solo. hakre ha il punto che sarebbe sensato per qualcuno che legge questa domanda usare una libreria che era nota per essere sicura e ben testata, ad esempio da Pear piuttosto che prendere semplicemente questo codice nel merito. Inoltre, vale la pena sottolineare che PHP 5.2 era già fuori supporto quando è stata posta questa domanda. Mentre scrivo ora, non è supportato da due anni e ha riscontrato problemi di sicurezza che non verranno corretti. È quindi un problema di sicurezza semplicemente utilizzare PHP 5.2, prima ancora di considerare il codice in questa risposta.
Spudley,

439

Suppongo che i due array che hai fornito per PHP e JS non siano correlati, e sono solo esempi di come gli array appaiono nelle due lingue. Chiaramente non sarai in grado di convertire quelle sequenze di lettere e numeri in quei nomi di città.

PHP fornisce una funzione per convertire array PHP in codice Javascript: json_encode(). (tecnicamente, è in formato JSON; JSON è l'acronimo di JavaScript Object Notation)

Usalo in questo modo:

<script type='text/javascript'>
<?php
$php_array = array('abc','def','ghi');
$js_array = json_encode($php_array);
echo "var javascript_array = ". $js_array . ";\n";
?>
</script>

Vedi anche la pagina di manuale che ho linkato sopra per maggiori informazioni.

Nota che json_encode()è disponibile solo in PHP 5.2 e versioni successive, quindi se stai usando una versione precedente, dovrai usarne una esistente - la pagina di manuale di PHP include anche commenti con funzioni scritte da persone che ne avevano bisogno. (ma detto questo, se stai usando qualcosa di più vecchio di PHP 5.2 devi aggiornare al più presto)


Ti manca un punto e virgola alla fine dell'array javascript, e inoltre non è così che vengono inizializzati gli array PHP (prova l'array ('abc' ....)) ... vota comunque perché è probabilmente quello che OP vuole
Daniel Sloof

@Spudley Ciao, ci ho provato e nel javascript ho provato ad accedere all'array creato in php in quanto tale console.log('stuff: ' + javascript_array[0]);, ma dice che javascript_arraynon è stato definito
Growler

Se il tuo array PHP contiene caratteri speciali, questo andrà storto. Puoi evitare caratteri speciali usando le funzioni urlencode (). Vedere la mia risposta: stackoverflow.com/questions/5618925/...
Ben Rogmans

1
Solo per sottolineare che json_encode definisce un oggetto JavaScript, NON un array.
Patrick Moore,

1
@PatrickMoore - se vuoi essere pedante al riguardo, json_encodegenera una stringa JSON, che può rappresentare un oggetto JS o un array JS, o anche un singolo valore scalare, se è quello che lo passi. Gli esempi nella mia risposta genereranno un array JavaScript, non un oggetto.
Spudley,

39

Stupido e semplice:

var js_array = [<?php echo '"'.implode('","', $php_array).'"' ?>];

6
Solo per curiosità : cosa accadrebbe quando la stringa contiene virgolette, virgolette doppie e / o virgola?
Nis,

1
Poiché esiste una funzione per questo, dovrebbe essere preferito a una soluzione improvvisata a meno che non ci sia una buona ragione; non è indicato alcun motivo.
cjbarth,

funziona meglio per i caratteri Unicode (nel mio caso urdu)
Hammad Khan,

33

Non è necessario chiamare parseJSON poiché l' output di json_encodeè un valore letterale javascript. Basta assegnarlo a una variabile js.

<script type="text/javascript">
    //Assign php generated json to JavaScript variable
    var tempArray = <?php echo json_encode($php_array); ?>;

   //You will be able to access the properties as 
    alert(tempArray[0].Key);
</script>

23

puoi convertire matrici php in javascript usando la json_encodefunzione di php

<?php $phpArray = array(
          0 => 001-1234567, 
          1 => 1234567, 
          2 => 12345678, 
          3 => 12345678,
          4 => 12345678,
          5 => 'AP1W3242',
          6 => 'AP7X1234',
          7 => 'AS1234',
          8 => 'MH9Z2324', 
          9 => 'MX1234', 
          10 => 'TN1A3242',
          11 => 'ZZ1234'
    )
?>
<script type="text/javascript">

    var jArray= <?php echo json_encode($phpArray ); ?>;

    for(var i=0;i<12;i++){
        alert(jArray[i]);
    }

 </script>

3
quel ciclo è terribile
Eric

2
Beh, quello era a scopo dimostrativo :)
Dipesh KC,

7
@Eric l'esempio è stato preso direttamente così com'è dalla domanda. Avrei potuto usare console.log()ma la domanda in sé è molto semplice (e molti utenti non hanno esperienza con lo strumento di ispezione del codice del browser), quindi ho deciso di andare con alert () dal momento che l'utente lo vedrà direttamente. non è la parte interessata della domanda, solo un modo per verificare se la logica funziona o no.
Dipesh KC

17

Trovo che il modo più rapido e semplice per lavorare con un array PHP in Javascript sia fare questo:

PHP:

$php_arr = array('a','b','c','d');

Javascript:

//this gives me a JSON object
js_arr = '<?php echo JSON_encode($php_arr);?>';


//Depending on what I use it for I sometimes parse the json so I can work with a straight forward array:
js_arr = JSON.parse('<?php echo JSON_encode($php_arr);?>');

10

così semplice ...!

usa questo metodo:

<?php echo json_encode($your_array); ?>; 

in laravel blade {{}} usa questo metodo:

{{ str_replace('&quot;', '', json_encode($your_array)) }} 

funzionante per array associati e non associati.


1
Il metodo utilizzato da @MohammadKawsara funziona meglio per me ovviamente se ti fidi dei dati dell'utente.
Tomas Crofty,

6

puoi anche fare così

<script>  
    <?php 
        $php_array = array('abc','def','ghi');
        $code_array = json_encode($php_array);
    ?>  
    var array_code = <?php echo $code_array; ?>;
    console.log(array_code);
</script>

6

È molto semplice che uso in questo modo:

JAVASCRIPT :

var arrayJavascript = <?php echo json_encode($arrayPhp) ?>;

Convertire l' array PHP in Javascript

Saluti!


4

Per un array multidimensionale in PHP4 è possibile utilizzare la seguente aggiunta al codice pubblicato da Udo G:

function js_str($s) {
   return '"'.addcslashes($s, "\0..\37\"\\").'"';
}

function js_array($array, $keys_array) {
  foreach ($array as $key => $value) {
    $new_keys_array = $keys_array;
    $new_keys_array[] = $key;
    if(is_array($value)) {          
      echo 'javascript_array';
      foreach($new_keys_array as $key) {
        echo '["'.$key.'"]';
      }
      echo ' = new Array();';

      js_array($value, $new_keys_array);
    } else {
      echo 'javascript_array';
      foreach($new_keys_array as $key) {
        echo '["'.$key.'"]';
      }
      echo ' = '.js_str($value).";";                        
    }
  } 
}

echo 'var javascript_array = new Array();';
js_array($php_array, array());

4

Questa è la mia funzione JavaScript deve essere in PHP, altrimenti usa SESSION.

<?php
 $phpArray=array(1,2,3,4,5,6);
?>

<div id="arrayCon" style="width:300px;"></div>

<script type="text/javascript">
var jsArray = new Array();
<?php
 $numArray=count($phpArray);
 for($i=0;$i<$numArray;$i++){
  echo "jsArray[$i] = ". $phpArray[$i] . ";\n";
 }
?>
$("#arrayCon").text(jsArray[1]);
</script>

L'ultima riga può essere .... text (jsArray); e verrà mostrato "1,2,3,4,5,6"


3

Uso un array php falso

<?php 
       // instead to create your array like this
       $php_array = ["The","quick","brown","fox","jumps","over","the","lazy","dog"];

       // do it like this (a simple variable but with separator)
       $php_fake_array = "The,quick,brown,fox,jumps,over,the,lazy,dog";
?>

<script type="text/javascript">

        // use the same separator for the JS split() function
        js_array = '<?php echo $php_fake_array; ?>'.split(',');

</script>

se mai l'array è sconosciuto (già creato)

<?php 
        $php_array = file('my_file.txt');
        $php_fake_array = "";

        // transform your array with concatenate like this
        foreach ($php_array as $cell){

            // since this array is unknown, use clever separator
            $php_fake_array .= $cell.",,,,,"; 
        }
?>

<script type="text/javascript">

        // use the same separator for the JS split() function
        js_array = '<?php echo $php_fake_array; ?>'.split(',,,,,');

</script>

... oppure potresti implodere () il primo array per ottenere quello "falso". So che questa è una vecchia risposta, ma l'idea mi è appena passata per la testa.
Peter Lenjo,

1
certo, ma il mio modo è il più veloce di tutti i suggerimenti su questa pagina. A volte, la velocità potrebbe essere un fattore importante.
Mik

2

Può essere fatto in un modo più sicuro.

Se il tuo array PHP contiene caratteri speciali, devi usare rawurlencode () in PHP e quindi usare decodeURIComponent () in JS per sfuggire a quelli. E analizza il JSON in js nativo. Prova questo:

var data = JSON.parse(
        decodeURIComponent(
            "<?=rawurlencode(json_encode($data));?>"
        )
    );

console.log(data);

1

Ho avuto lo stesso problema ed è così che l'ho fatto.

/*PHP FILE*/

<?php

$data = file_get_contents('http://yourrssdomain.com/rss');
$data = simplexml_load_string($data);

$articles = array();

foreach($data->channel->item as $item){

    $articles[] = array(

        'title' => (string)$item->title,
        'description' => (string)$item ->description,
        'link' => (string)$item ->link, 
        'guid' => (string)$item ->guid,
        'pubdate' => (string)$item ->pubDate,
        'category' => (string)$item ->category,

    );  
}

// IF YOU PRINT_R THE ARTICLES ARRAY YOU WILL GET THE SAME KIND OF ARRAY THAT YOU ARE GETTING SO I CREATE AN OUTPUT STING AND WITH A FOR LOOP I ADD SOME CHARACTERS TO SPLIT LATER WITH JAVASCRIPT

$output="";

for($i = 0; $i < sizeof($articles); $i++){

    //# Items
    //| Attributes 

    if($i != 0) $output.="#"; /// IF NOT THE FIRST

// IF NOT THE FIRST ITEM ADD '#' TO SEPARATE EACH ITEM AND THEN '|' TO SEPARATE EACH ATTRIBUTE OF THE ITEM 

    $output.=$articles[$i]['title']."|";
    $output.=$articles[$i]['description']."|";
    $output.=$articles[$i]['link']."|";
    $output.=$articles[$i]['guid']."|";
    $output.=$articles[$i]['pubdate']."|";
    $output.=$articles[$i]['category'];
}

echo $output;

?>
/* php file */


/*AJAX COMUNICATION*/

$(document).ready(function(e) {

/*AJAX COMUNICATION*/

var prodlist= [];
var attrlist= [];

  $.ajax({  
      type: "get",  
      url: "php/fromupnorthrss.php",  
      data: {feeding: "feedstest"},
      }).done(function(data) {

        prodlist= data.split('#');

        for(var i = 0; i < prodlist.length; i++){

            attrlist= prodlist[i].split('|');

            alert(attrlist[0]); /// NOW I CAN REACH EACH ELEMENT HOW I WANT TO. 
        }
   });
});

Spero possa essere d'aiuto.


1

Mantienilo semplice:

var jsObject = JSON.parse('<?= addslashes(json_encode($phpArray)) ?>');

0

Se hai bisogno di un array PHP multidimensionale per essere stampato direttamente nel codice sorgente della pagina html e in modo rientrato Javascript Object Notation (aka JSON) leggibile dall'uomo, usa questa bella funzione che ho trovato in http://php.net/manual /en/function.json-encode.php#102091 codificato da qualcuno soprannominato "bohwaz".

<?php

function json_readable_encode($in, $indent = 0, $from_array = false)
{
    $_myself = __FUNCTION__;
    $_escape = function ($str)
    {
        return preg_replace("!([\b\t\n\r\f\"\\'])!", "\\\\\\1", $str);
    };

    $out = '';

    foreach ($in as $key=>$value)
    {
        $out .= str_repeat("\t", $indent + 1);
        $out .= "\"".$_escape((string)$key)."\": ";

        if (is_object($value) || is_array($value))
        {
            $out .= "\n";
            $out .= $_myself($value, $indent + 1);
        }
        elseif (is_bool($value))
        {
            $out .= $value ? 'true' : 'false';
        }
        elseif (is_null($value))
        {
            $out .= 'null';
        }
        elseif (is_string($value))
        {
            $out .= "\"" . $_escape($value) ."\"";
        }
        else
        {
            $out .= $value;
        }

        $out .= ",\n";
    }

    if (!empty($out))
    {
        $out = substr($out, 0, -2);
    }

    $out = str_repeat("\t", $indent) . "{\n" . $out;
    $out .= "\n" . str_repeat("\t", $indent) . "}";

    return $out;
}

?>       

Per favore, non importa !! Ora possiamo semplicemente usare questo: json_encode ($ array, JSON_PRETTY_PRINT); e sii felice!
Heitor

0

Di seguito è riportato un trucco piuttosto semplice per convertire l'array PHP in array JavaScript:

$array = array("one","two","three");

JS di seguito:

// Use PHP tags for json_encode()

var js_json =  json_encode($array);
var js_json_string = JSON.stringify(js_json);
var js_json_array = JSON.parse(js_json_string);

alert(js_json_array.length);

Esso funziona magicamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.