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"
];
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), ';';
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)
Stupide et simple:
var js_array = [<?php echo '"'.implode('","', $php_array).'"' ?>];
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>
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>
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);?>');
Si simple ...!
Utilisez cette méthode:
<?php echo json_encode($your_array); ?>;
Dans laravel lame {{ }} utilisez cette méthode:
{{ str_replace('"', '', json_encode($your_array)) }}
Travailler pour le tableau associé et non associé.
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>
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"
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());
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);
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.
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>
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;
}
?>
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.
Gardez les choses simples:
var jsObject = JSON.parse('<?= addslashes(json_encode($phpArray)) ?>');