Как передать массив из php в javascript
@AlexChebotarsky Посмотрите в браузере исходный код полученной страницы.
1 июл 2017 в 19:40
Простите, за то давно задал вопрос и только сейчас отписываюсь. Зашёл в консоль (кстати не знал что консоль настолько удобный инструмент предупреждающий об ошибках в js, спасибо, теперь знаю), и увидел что в js вставился массив, естественно в формате json, но был без кавычек, добавил всё исправилось и побежал радостный дальше заканчивать модуль, и не поблагодарил своих спасителей, спасибо всем!
Как передать массив из php в javascript
Для передачи массива из PHP в JavaScript можно воспользоваться несколькими способами. Один из них — преобразование массива в JSON формат с помощью функции json_encode() в PHP и передача его в JavaScript с помощью переменной:
$myArray = array("apple", "banana", "orange"); $myJSON = json_encode($myArray); ?> const myArray = echo $myJSON; ?>; console.log(myArray); // ["apple", "banana", "orange"]
Курсы javascript
Спасибо большое, но есть ли возможность передавать также название массивов?
Это не обязательно но для дальнейшего удобства обработки данных.
27.06.2017, 11:50
Регистрация: 14.01.2015
Сообщений: 12,990
У массивов нет названий ни в РНР, ни в JS. $strings и $numb, это не названия, а переменные под которыми объявлены массивы. Вам чего надо, чтобы вместо var strings = result[0]; получать var strings = result.strings?
27.06.2017, 12:00
Регистрация: 24.09.2014
Сообщений: 44
Все я вас понял. Натолкнули на мысль.
json_encode(array('strings' => $strings, 'numb' => $numb));
и тогда я получу
var result = jQuery.parseJSON( data ); var strings = result['strings'];
Я ведь правильно все понимаю
27.06.2017, 12:01
Регистрация: 24.09.2014
Сообщений: 44
У массивов нет названий ни в РНР, ни в JS. $strings и $numb, это не названия, а переменные под которыми объявлены массивы.
Тут вы правы. Я некоректно выразился. Извиняюсь за свою глупость.
27.06.2017, 12:10
Регистрация: 24.09.2014
Сообщений: 44
К сожалению мой код не работает кончоль выдает ошибку
JSON.parse: unexpected character at line 1 column 1 of the JSON data
Что я делаю не так?
27.06.2017, 12:26
Регистрация: 14.01.2015
Сообщений: 12,990
В JS нет ассоциативных массивов, есть объекты, и в данном случае ключи strings и numb массива РНР будет на клиенте свойствами объекта result. Можно к ним обращаться как result[‘strings’], но можно проще result.strings.
Некорректный JSON. Это может быть следствием ошибки на сервере (ее вывода в браузер), выводом в браузер чего либо до или после echo json_encode(array(‘strings’ => $strings, ‘numb’ => $numb)).
Преобразование массива 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
Если у вас нет 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) .
Используйте это так:
$php_array = array(‘abc’,’def’,’ghi’);
$js_array = json_encode($php_array);
echo «var javascript_array = «. $js_array . «;\n»;
?>
Обратите внимание, что json_encode() доступна только в PHP 5.2 и выше, поэтому, если вы используете старую версию, вам нужно будет ознакомиться с руководством по вашей версии PHP.
Ответ 3
В ы можете преобразовать массивы php в javascript с помощью функции json_encode php:
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’
)
?>
var jArray = ;
for(var i=0;i <12;i++)<
alert(jArray[i]);
>
Ответ 4
Для многомерного массива в PHP 4 вы можете использовать следующий код:
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());
Ответ 5
Это моя функция. JavaScript должен быть под PHP, иначе используйте SESSION.
$phpArray=array(1,2,3,4,5,6);
?>
var jsArray = new Array();
$numArray=count($phpArray);
for($i=0;$i <$numArray;$i++)<
echo «jsArray[$i] = «. $phpArray[$i] . «;\n»;
>
?>
$(«#arrayCon»).text(jsArray[1]);
Последний ряд может быть . text(jsArray); и будет показан результат «1,2,3,4,5,6».
Ответ 6
Я использую поддельный массив php
// создайте свой массив следующим образом
$php_array = [«The»,»quick»,»brown»,»fox»,»jumps»,»over»,»the»,»lazy»,»dog»];
// сделайте это следующим образом (простая переменная, но с разделителем)
$php_fake_array = «The,quick,brown,fox,jumps,over,the,lazy,dog»;
?>
// используйте тот же разделитель для функции JS split()
js_array = ».split(‘,’);
если ваш массив заранее неизвестен:
$php_array = file(‘my_file.txt’);
$php_fake_array = «»;
// преобразуйте ваш массив с помощью конкатен а ции следующим образом
foreach ($php_array as $cell)
// поскольку этот массив неизвестен, используйте умный разделитель
$php_fake_array .= $cell.». «;
>
?>
// используйте тот же разделитель для функции JS split()
js_array = ».split(‘. ‘);
Ответ 7
У меня была такая же проблема, и вот как я это сделал :
/*PHP FILE*/
$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,
);
>
// ЕСЛИ ВЫ РАСПЕЧАТАЕТЕ МАССИВ СТАТЕЙ, ТО ПОЛУЧИТЕ ТОТ ЖЕ МАССИВ, ЧТО И СЕЙЧАС, ПОЭТОМУ Я СОЗДАЮ ВЫХОДНУЮ СТРОКУ И С ПОМОЩЬЮ ЦИКЛА FOR ДОБАВЛЯЮ НЕСКОЛЬКО СИМВОЛОВ ДЛЯ ПОСЛЕДУЮЩЕГО РАЗДЕЛЕНИЯ С ПОМОЩЬЮ JAVASCRIPT
$output=»»;
for($i = 0; $i < sizeof($articles); $i++)
//# элементы
//| атрибуты
if($i != 0) $output.=»#»;
// ЕСЛИ ЭТО НЕ ПЕРВЫЙ ЭЛЕМЕНТ, ДОБАВЬТЕ ‘#’ ДЛЯ РАЗДЕЛЕНИЯ КАЖДОГО ЭЛЕМЕНТА, А ЗАТЕМ ‘|’ ДЛЯ РАЗДЕЛЕНИЯ КАЖДОГО АТРИБУТА ЭЛЕМЕНТА
$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;
?>
/*AJAX */
$(document).ready(function(e)
var prodlist= [];
var attrlist= [];
$.ajax(
type: «get»,
url: «php/fromupnorthrss.php»,
data: ,
>).done(function(data)
prodlist= data.split(‘#’);
for(var i = 0; i < prodlist.length; i++)
attrlist= prodlist[i].split(‘|’);
alert(attrlist[0]); /// ТЕПЕРЬ МОЖНО ДОБРАТЬСЯ ДО КАЖДОГО ЭЛЕМЕНТА
>);
>);
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.