Как передать массив из php в javascript
Перейти к содержимому

Как передать массив из php в javascript

  • автор:

Как передать массив из php в javascript

@AlexChebotarsky Посмотрите в браузере исходный код полученной страницы.

1 июл 2017 в 19:40

Простите, за то давно задал вопрос и только сейчас отписываюсь. Зашёл в консоль (кстати не знал что консоль настолько удобный инструмент предупреждающий об ошибках в js, спасибо, теперь знаю), и увидел что в js вставился массив, естественно в формате json, но был без кавычек, добавил всё исправилось и побежал радостный дальше заканчивать модуль, и не поблагодарил своих спасителей, спасибо всем!

Преобразование массива 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]); /// ТЕПЕРЬ МОЖНО ДОБРАТЬСЯ ДО КАЖДОГО ЭЛЕМЕНТА

>);

>);

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Курсы 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 в 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"]  

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *