220 votes

Convertir un tableau php en Javascript

Comment puis-je convertir un tableau PHP dans un format comme celui-ci

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
)

à un tableau Javascript dans le format ci-dessous ?

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

3 votes

Pouvez-vous préciser votre question ? Essayez-vous vraiment de créer un tableau JavaScript, ou essayez-vous de créer une chaîne de caractères que vous pouvez placer dans un fichier de type script qui va le créer, ou essayez-vous de créer JSON à renvoyer en réponse à une requête ajax, ou... (Il est également intéressant de consulter le site web de la Comment formater sur le côté droit lorsque vous posez votre question, et la page liée de la [ ?] juste au-dessus de la zone de questions).

494voto

Spudley Points 85371

Je vais supposer que les deux tableaux que vous avez donnés pour PHP et JS ne sont pas liés, et qu'ils sont juste des exemples de la façon dont les tableaux se présentent dans les deux langages. Il est clair que vous ne serez pas en mesure de convertir ces séquences de lettres et de chiffres en noms de villes.

PHP fournit une fonction permettant de convertir les tableaux PHP en code Javascript : json_encode() . (techniquement, c'est le format JSON ; JSON est l'abréviation de JavaScript Object Notation)

Utilisez-le comme ça :

<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>

Voir aussi la page du manuel dont j'ai donné le lien ci-dessus pour plus d'informations.

Notez que json_encode() n'est disponible qu'à partir de la version 5.2 de PHP, donc si vous utilisez une version antérieure, vous devrez utiliser l'option un existant -- la page du manuel PHP comprend également des commentaires avec des fonctions écrites par des personnes qui en avaient besoin. (Cela dit, si vous utilisez une version antérieure à PHP 5.2, vous devriez la mettre à jour dès que possible).

0 votes

Il manque un point-virgule à la fin du tableau javascript, et ce n'est pas de cette façon que les tableaux PHP sont initialisés (essayez array('abc'....))... upvote quand même parce que c'est probablement ce que le PO veut.

0 votes

@Spudley Salut, j'ai essayé ceci, et dans le javascript j'ai essayé d'accéder au tableau créé dans le php comme tel console.log('stuff: ' + javascript_array[0]); mais il est dit javascript_array n'a pas été défini

0 votes

Si votre tableau PHP contient des caractères spéciaux, cela ne fonctionnera pas. Vous pouvez échapper aux caractères spéciaux en utilisant les fonctions urlencode(). Voir ma réponse : stackoverflow.com/questions/5618925/

65voto

Udo G Points 2254

La réponse de Spudley est bonne .

Avis de sécurité : Les éléments suivants ne devraient plus être nécessaires pour vous

Si vous n'avez pas PHP 5.2, vous pouvez utiliser quelque chose comme ceci :

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 votes

D'accord : si vous utilisez un ancien PHP, vous devrez écrire le vôtre. Cependant, vous devriez également envisager de mettre à jour votre PHP si cela est possible !

6 votes

Même si vous utilisez un vieux PHP, n'écrivez pas le vôtre, prenez une bibliothèque existante qui est maintenue/utilisée par plusieurs personnes/projets. Ainsi, cette réponse ne fait que montrer comment quelque chose pourrait être fait, mais elle ne devrait pas le recommander - quelle que soit la version de PHP. Par exemple pear.php.net/package/Services_JSON

0 votes

Vous avez raison. Cependant, le code ci-dessus a été utilisé/testé pendant des années dans deux grands projets.

44voto

Eric Points 813

Bête et simple :

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

7 votes

Juste par curiosité Que se passe-t-il lorsque la chaîne de caractères contient des guillemets, des guillemets doubles et/ou des virgules ?

1 votes

Puisqu'il existe une fonction pour cela, il faut la préférer à une solution improvisée, à moins qu'il n'y ait une bonne raison ; aucune raison n'est indiquée ici.

0 votes

Fonctionne mieux pour les caractères unicode (urdu dans mon cas)

44voto

Jaykishan Points 665

Vous n'avez pas besoin d'appeler parseJSON puisque la fonction sortie de json_encode est un littéral javascript. Il suffit de l'assigner à une variable 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>

1 votes

Merci, cela a bien fonctionné même pour un tableau d'objets mixtes. Très simple et efficace !

24voto

Dipesh Kc Points 718

Vous pouvez convertir les tableaux php en javascript en utilisant la fonction de conversion de php. json_encode fonction

<?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>

4 votes

Cette boucle est terrible

2 votes

C'était pour la démonstration :)

7 votes

@Eric l'exemple a été directement pris tel qu'il est de la question. J'aurais pu utiliser console.log() mais la question elle-même est très basique (et l'utilisateur n'a souvent pas d'expérience avec l'outil d'inspection du code du navigateur), donc j'ai décidé d'utiliser alert() puisque l'utilisateur le verra directement. Mais vous savez très bien que ce n'est pas la partie concernée de la question, juste un moyen de vérifier si la logique fonctionne ou non.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X