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"
];
La réponse de Spudley va bien .
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 ne sont que des exemples de leur apparence dans les deux langues. De toute évidence, vous ne pourrez pas convertir ces séquences de lettres et de chiffres en noms de ville.
PHP fournit une fonction permettant de convertir les tableaux PHP en code Javascript: json_encode()
. (techniquement, c'est le format JSON; JSON signifie JavaScript 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 I liée ci-dessus pour plus d'informations.
Notez que json_encode()
est uniquement disponible dans les versions PHP 5.2 et supérieures. Par conséquent, si vous utilisez une version plus ancienne, vous devez utiliser un fichier existant - la page de manuel PHP également. inclut des commentaires avec des fonctions écrites par des personnes qui en avaient besoin. (mais cela dit, si vous utilisez une version antérieure à PHP 5.2, vous devez mettre à niveau dès que possible.)
Dumb et simple:
var js_array = [<?php echo '"'.implode('","', $php_array).'"' ?>];
Vous n'avez pas besoin d'appeler parseJSON car la sortie de json_encode
est un littéral javascript. Assignez-le simplement à 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 json_encode
function de 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>
Pour trouver le moyen le plus rapide et le plus simple de travailler avec un tableau PHP en Javascript, procédez comme suit:
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 blade {{}} utilisez cette méthode:
{{ str_replace('"', '', json_encode($your_array)) }}
travaillant pour tableau associé et non associé.
tu peux 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>
Pour un multidimensional array en PHP4, vous pouvez utiliser l’addition suivante au code envoyé 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());
Ceci est ma fonction. JavaScript doit être sous PHP, sinon utilisez 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>
La dernière ligne peut être .... text (jsArray); et sera montré "1,2,3,4,5,6"
J'utilise un tableau faux 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>
Cela peut être fait de manière plus sûre.
Si votre tableau PHP contient des caractères spéciaux, vous devez utiliser rawurlencode () dans PHP, puis utiliser decodeURIComponent () dans JS pour les échapper. Et analyser le JSON à js natif. Essaye ça:
var data = JSON.parse(
decodeURIComponent(
"<?=rawurlencode(json_encode($data));?>"
)
);
console.log(data);
J'ai eu le même problème et c'est comme ça que je l'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.
Rester simple :
var jsObject = JSON.parse('<?= addslashes(json_encode($phpArray)) ?>');
Si vous avez besoin d’un tableau multidimensionnel PHP à imprimer directement dans le code source de la page html et de manière indentée en notation javascript lisible (JSON), utilisez la fonction Nice que j’ai trouvée dans http://php.net/manual/en/function.json-encode.php#102091 codé par une personne surnommée "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 un 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);
Il fonctionne comme un charme.