Преобразование php-массива в Javascript

Как преобразовать массив PHP в такой формат

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 ) 

к массиву Javascript в следующем формате?

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

Ответ Сподли – это хорошо .

Уведомление о безопасности: Вам больше не нужно больше

Если у вас нет PHP 5.2, вы можете использовать что-то вроде этого:

 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), ';'; 

Я предполагаю, что два массива, которые вы указали для PHP и JS, не связаны, и они просто примеры того, как массивы выглядят на двух языках. Очевидно, что вы не сможете конвертировать эти последовательности букв и цифр в эти названия городов.

PHP предоставляет функцию преобразования массивов PHP в код Javascript: json_encode() . (технически, это формат JSON, JSON обозначает JavaScript Object Notation)

Используйте его так:

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

См. Также страницу руководства, приведенную выше, для получения дополнительной информации.

Обратите внимание, что json_encode() доступен только в PHP 5.2 и выше, поэтому, если вы используете более старую версию, вам нужно будет использовать существующую – страница руководства PHP также содержит комментарии с функциями, написанными людьми, которые в ней нуждались , (но при этом, если вы используете что-то старше PHP 5.2, вам следует обновить ASAP)

Тупой и простой:

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

Вам не нужно вызывать parseJSON, поскольку вывод json_encode является литералом javascript. Просто назначьте его переменной 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> 

вы можете преобразовать php-массивы в javascript, используя функцию json_encode 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> 

Я считаю, что самый быстрый и простой способ работы с массивом PHP в Javascript заключается в следующем:

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);?>'); 

Вы также можете сделать так

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

Это моя функция. JavaScript должен находиться под PHP, иначе используйте 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> 

Последняя строка может быть … text (jsArray); и будет показано "1,2,3,4,5,6"

Для многомерного массива в PHP4 вы можете использовать следующее дополнение к коду, опубликованному 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()); 

Это можно сделать более безопасным способом.

Если ваш PHP-массив содержит специальные символы, вам нужно использовать rawurlencode () в PHP, а затем использовать decodeURIComponent () в JS для их устранения. И проанализируйте JSON для родных js. Попробуй это:

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

У меня была та же проблема, и я так и сделал.

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

Я надеюсь, что это помогает.

Я использую фальшивый 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> 

если когда-либо ваш массив неизвестен (уже сделан)

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

так просто …!

используйте этот метод:

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

в ларавом лезвии {{}} используйте этот метод:

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

работающих для ассоциированного и несвязанного массива.

Если вам нужно, чтобы многомерный массив PHP был напечатан непосредственно в исходном HTML-тексте страницы и в отступом, предназначенном для чтения в формате Javascript Javascript Object Notation (aka JSON), используйте эту приятную функцию, которую я нашел в http://php.net/manual /en/function.json-encode.php#102091, закодированный кем-то по прозвищу «бохваз».

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

Ниже приведен довольно простой трюк для преобразования массива PHP в массив JavaScript:

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

JS ниже:

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

Отлично работает.