Преобразование 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"
];
Ответы
Ответ 1
Ответ Spudley в порядке.
Уведомление о безопасности: Вам больше не нужно больше
Если у вас нет 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), ';';
Ответ 2
Я собираюсь предположить, что два массива, которые вы указали для PHP и JS, не связаны, и это просто примеры того, как массивы выглядят на двух языках. Очевидно, что вы не сможете конвертировать эти последовательности букв и цифр в эти названия городов.
PHP предоставляет функцию преобразования массивов PHP в код Javascript: json_encode()
. (технически, это формат JSON, JSON обозначает обозначение объекта JavaScript)
Используйте его следующим образом:
<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)
Ответ 3
Немой и простой:
var js_array = [<?php echo '"'.implode('","', $php_array).'"' ?>];
Ответ 4
Вам не нужно вызывать 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>
Ответ 5
вы можете конвертировать php-массивы в javascript, используя php json_encode
функцию
<?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>
Ответ 6
Я нахожу самый быстрый и простой способ работы с массивом 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);?>');
Ответ 7
так просто...!
используйте этот метод:
<?php echo json_encode($your_array); ?>;
в laravel blade {{}} используйте этот метод:
{{ str_replace('"', '', json_encode($your_array)) }}
работает для ассоциированного и несвязанного массива.
Ответ 8
u также может сделать так
<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>
Ответ 9
Для массива многомерного в 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());
Ответ 10
Это моя функция. 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"
Ответ 11
Я использую фальшивый 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>
Ответ 12
Это можно сделать более безопасным способом.
Если ваш PHP-массив содержит специальные символы, вам нужно использовать rawurlencode() в PHP, а затем использовать decodeURIComponent() в JS, чтобы избежать их. И проанализируйте JSON для родных js. Попробуйте следующее:
var data = JSON.parse(
decodeURIComponent(
"<?=rawurlencode(json_encode($data));?>"
)
);
console.log(data);
Ответ 13
У меня была такая же проблема, и вот как я это сделал.
/*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.
}
});
});
Надеюсь, это поможет.
Ответ 14
Будьте проще:
var jsObject = JSON.parse('<?= addslashes(json_encode($phpArray)) ?>');
Ответ 15
Если вам нужен многомерный массив PHP, который будет напечатан непосредственно в исходном коде страницы html, а также в отступом, предназначенном для чтения с Javascript Javascript Object Notation (aka JSON), используйте эту приятную функцию, которую я нашел в http://php.net/manual/en/function.json-encode.php#102091, закодированный кем-то по кличке "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;
}
?>
Ответ 16
Ниже представлен довольно простой трюк для преобразования массива 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);
Он работает как шарм.
Ответ 17
Очень просто я использую этот способ:
JAVASCRIPT:
var arrayJavascript = <?php echo json_encode($arrayPhp) ?>;
Конвертировать PHP-массив в Javascript
С уважением!