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
)

Dans un tableau Javascript au format ci-dessous?

var cities = [
    "Aberdeen",
    "Ada",
    "Adamsville",
    "Addyston",
    "Adelphi",
    "Adena",
    "Adrian",
    "Akron",
    "Albany"
];
136
demandé sur caiosm1005 2011-04-11 12:54:20

16 réponses

La réponse de Spudley est bonne .

Avis de sécurité: ce qui suit ne devrait plus être nécessaire 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), ';';
44
répondu Udo G 2017-05-23 12:10:26

Je vais supposer que les deux tableaux que vous avez donnés pour PHP et JS ne sont pas liés, et ce ne sont que des exemples de l'apparence des tableaux dans les deux langues. Il est clair que vous ne serez pas en mesure de convertir ces séquences de lettres et de chiffres en ces noms de ville.

PHP fournit une fonction pour convertir les tableaux PHP en code Javascript: json_encode(). (techniquement, c'est le format JSON; JSON signifie JavaScript Object Notation)

Utilisez-le comme ceci:

<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 de manuel que j'ai liée ci-dessus pour plus d'informations.

Notez que json_encode()n'est disponible qu'en PHP 5.2 et plus, donc si vous utilisez une version plus ancienne, vous devrez utiliser une version existante - la page de manuel PHP comprend également des commentaires avec des fonctions écrites par des personnes qui en avaient besoin. (mais cela dit, si vous utilisez quelque chose de plus ancien que PHP 5.2, vous devriez mettre à jour dès que possible)

364
répondu Spudley 2016-01-30 17:23:40

Stupide et simple:

var js_array = [<?php echo '"'.implode('","', $php_array).'"' ?>];
32
répondu Eric 2012-10-12 16:49:48

Vous n'avez pas besoin d'appeler parseJSON depuis la 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>
23
répondu Jaykishan 2015-09-17 06:13:12

Vous pouvez convertir des tableaux php en javascript en utilisant 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>
19
répondu Dipesh Kc 2015-07-13 11:38:01

Je trouve que le moyen le plus rapide et le plus simple de travailler avec un tableau PHP en Javascript est de faire ceci:

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);?>');
13
répondu user3065931 2014-09-08 13:02:17

Si simple ...!

Utilisez cette méthode:

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

Dans laravel lame {{ }} utilisez cette méthode:

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

Travailler pour le tableau associé et non associé.

7
répondu اسماعیل زارع 2017-09-21 04:36:49

U peut aussi faire de cette façon

<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>
5
répondu cool Quazi 2017-03-01 12:50:34

C'est ma fonction. JavaScript doit être sous PHP sinon utiliser 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>

Dernière ligne peut être ....texte (jsArray); et sera affiché "1,2,3,4,5,6"

4
répondu japetko 2014-09-17 13:34:10

Pour un tableau multidimensionnel dans PHP4, vous pouvez utiliser L'ajout suivant au code posté par 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());
3
répondu Sander 2012-08-07 09:00:41

Cela peut être fait d'une manière plus sûre.

Si votre tableau PHP contient des caractères spéciaux, vous devez utiliser rawurlencode () en PHP, puis utiliser decodeURIComponent () dans JS pour les échapper. Et analysez le JSON en js natif. Essayez ceci:

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

console.log(data);
2
répondu Ben Rogmans 2015-08-24 15:03:38

J'ai eu le même problème et c'est comment j'ai fait.

/*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. 
        }
   });
});

J'espère que ça aide.

1
répondu Conceptree 2014-03-07 13:29:13

J'utilise un faux tableau php

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

Si jamais votre tableau est inconnu (déjà fait)

<?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>
1
répondu Mik 2016-09-16 01:30:45

Si vous avez besoin d'un tableau PHP multidimensionnel pour être imprimé directement dans le code source de la page html, et dans une Notation d'objet Javascript lisible par l'homme (alias JSON), utilisez cette belle fonction que j'ai trouvée dans http://php.net/manual/en/function.json-encode.php#102091 codé par quelqu'un surnommé "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;
}

?>       
0
répondu Heitor 2017-03-18 09:22:47

Voici une astuce assez simple pour convertir un tableau PHP en tableau JavaScript:

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

JS ci-dessous:

// 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);

Ça marche comme un charme.

0
répondu prashant parmar 2017-06-16 14:44:15

Gardez les choses simples:

var jsObject = JSON.parse('<?= addslashes(json_encode($phpArray)) ?>');
0
répondu Imabot 2018-09-03 14:09:50