Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818

Отдать ассоциативный массив JSON-у

26.01.2016, 19:31. Показов 4867. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
php отдает объект, а нужно получить массив с ключами и значниями

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
  foreach ($tariff['months_sales_percents'] as $month => $sale) {
        $months_count = round($sale * $month, 0, PHP_ROUND_HALF_UP);
        if ($months_count) {
            $tariff['months_gifts'][$month] = [
                'months' => $months_count,
                'text' => GetMessage($months_count . '_month_free'),
            ];
        }
    }
 
    // Считаем цену тарифа
    if ($tariff['PROPERTY_USERS_COUNT_VALUE'] > 0) {
        foreach ($tariff['prices'] as &$price) {
            $price /= $tariff['PROPERTY_USERS_COUNT_VALUE'];
        }
        unset($price);
 
        $tariff['PROPERTY_PRICE_VALUE'] /= $tariff['PROPERTY_USERS_COUNT_VALUE'];
    }
 
    $tariffs[$tariff["ID"]] = $tariff;
}
foreach($tariffs as $key){
    $result = $key["months_gifts"];
}
 
 
 
 
 
 
 
$values = array("val"=>$result);
echo json_encode($values);
если делать echo json_encode, то на выходе объект, который я не могу вставить в js, т.к. пишет Object Object. Если делаю print_r($values) получаю ассоциативный массив.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.01.2016, 19:31
Ответы с готовыми решениями:

Ассоциативный массив из php при преобразовании в json теряет порядок элементов
Ассоциативный массив из php при преобразовании в json теряет порядок элементов В js прилетает это var obj = jQuery.parseJSON(', ...

Парсинг json ответа в "ассоциативный массив"
Всем привет. Тривиальная задача, но не получается решить ее адекватно. Хочу сделать одностраничный сайт, с контентом , который будет...

JSON, AJAX и многомерный ассоциативный "массив"
Здравствуйте! Понимаю, что многомерных ассоциативный массивов как таковых в js нет. Проблема возникла у меня в следующем. У меня есть...

21
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
26.01.2016, 19:33
Цитата Сообщение от Mashka_mulashka Посмотреть сообщение
объект, который я не могу вставить в js, т.к. пишет Object Object
Почему же не можете? Объект - он и в JS объект.

Если не ошибаюсь, массивы с ассоциативными ключами в JS делаются через объекты.
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
26.01.2016, 21:00  [ТС]
а кодом можете показать?
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
26.01.2016, 21:19
Mashka_mulashka,

index.php
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
    $.ajax({
        type: 'POST',
        url: 'ajax.php',
        dataType: 'json',
        success: function(data){
            alert(data[0]);
            alert(data[1]);
        },
        error(error){
            alert('AJAX ERROR');
        }
    });
});
</script>
ajax.php
PHP
1
2
3
4
5
<?
$arr[0] = 'Значение1';
$arr[1] = 'Значение2';
echo json_encode($arr);
?>
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
26.01.2016, 21:27  [ТС]
но я же так и делаю

PHP
1
2
3
4
5
6
7
8
9
10
11
foreach($tariffs as $key){
    $result = $key["months_gifts"];
}
 
 
 
 
 
 
 
$values = array("val"=>$result);
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
26.01.2016, 22:17
Mashka_mulashka, ну этот код мало о чём говорит, надо смотреть, как выводите и обрабатываете в JS.
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
26.01.2016, 22:43  [ТС]
в шапке темы полный код php
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
26.01.2016, 22:57
Mashka_mulashka,
Цитата Сообщение от Jodah Посмотреть сообщение
и обрабатываете в JS
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
26.01.2016, 22:59  [ТС]
JavaScript
1
data.val
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
26.01.2016, 23:10
Mashka_mulashka, а если так?
JavaScript
1
alert(data['val']);
Что выведет?
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
26.01.2016, 23:11  [ТС]
Object Object
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
27.01.2016, 00:36
Цитата Сообщение от Mashka_mulashka Посмотреть сообщение
foreach($tariffs as $key){
* * $result = $key["months_gifts"];
}
Кстати, скобки не пропустили? $result[] = ...

Если $result - массив, то обращайтесь к его элементам как в обычном массиве.

Например, если:

PHP
1
2
$values = array('val' => array(0 => 'test'));
echo json_encode($values);
То:
JavaScript
1
alert(data['val'][0]);
У меня выводит "test".
0
162 / 161 / 66
Регистрация: 28.06.2015
Сообщений: 576
27.01.2016, 09:08
Имхо, лучше используйте console.log вместо alert, т.к. в консоли потом можно "развернуть" объекты. И смотреть из чего они состоят
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
27.01.2016, 10:56  [ТС]
видимо, проблема в том, что результат вот в таком виде приходит



Добавлено через 1 минуту
Цитата Сообщение от Jodah Посмотреть сообщение
Сообщение от Mashka_mulashka
foreach($tariffs as $key){
* * $result = $key["months_gifts"];
}
Кстати, скобки не пропустили? $result[] = ...
Если $result - массив, то обращайтесь к его элементам как в обычном массиве.
нет.

PHP
1
2
3
4
5
foreach($tariffs as $key){
    $result[] = $key["months_gifts"];
}
$values = array("val"=>$result);
echo json_encode($values);
Добавлено через 12 минут
Цитата Сообщение от Jodah Посмотреть сообщение
Если $result - массив, то обращайтесь к его элементам как в обычном массиве.
Например, если:
PHPВыделить код
1
2
$values = array('val' => array(0 => 'test'));
echo json_encode($values);
но мне заранее неизвестно количество элементов в массиве result
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
27.01.2016, 10:57
Цитата Сообщение от Mashka_mulashka Посмотреть сообщение
видимо, проблема в том, что результат вот в таком виде приходит
С объектом всё в порядке.

Если вы такой код выполните в PHP, что выведется на экран?
PHP
1
echo array('test');
Выведется Array(). Вот и JS вам пишет - Object.
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
27.01.2016, 11:18  [ТС]
вот полный код js

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$('#tariff_id').change(function(){
        var tariff_id = $(this).val();
 
        //Ajax запрос на определение значений тарифа
        $.ajax({
           type:"POST",
            dataType:"json",
            data:{tariff_id:tariff_id},
            url:"/ajax/tariffprop",
            success:function(data) {
               $('#period_id').append('<option>'+data.val+'</option>');
            },
            error:function(){
                alert("error");
            }
        });
    });
и полный код php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
$tariff_id = $_REQUEST["tariff_id"];
$tariff_id = intval($tariff_id);
 
 
$tariffs = [];
 
$filter = [
    'ID' => $tariff_id,
    'IBLOCK_ID' => CRM_TARIFFES_IBLOCK_ID,
];
 
 
$select = [
    'ID',
    'PROPERTY_PRICE',
    'PROPERTY_USERS_COUNT',
];
 
$tariffs_result = CIBlockElement::GetList(['SORT' => 'ASC'], $filter, FALSE, FALSE, $select);
 
while ($tariff = $tariffs_result->GetNext(FALSE, FALSE)) {
    $tariff['months_sales_percents'] = get_sale_percents_array($tariff['PROPERTY_PRICE_VALUE'], NULL, $tariff);
    $tariff['months_gifts'] = [];
 
    // Считаем кол-во месяцев в подарок
    foreach ($tariff['months_sales_percents'] as $month => $sale) {
        $months_count = round($sale * $month, 0, PHP_ROUND_HALF_UP);
        if ($months_count) {
            $tariff['months_gifts'][$month] = [
                'months' => $months_count,
                'text' => GetMessage($months_count . '_month_free'),
            ];
        }
    }
 
    // Считаем цену тарифа
    if ($tariff['PROPERTY_USERS_COUNT_VALUE'] > 0) {
        foreach ($tariff['prices'] as &$price) {
            $price /= $tariff['PROPERTY_USERS_COUNT_VALUE'];
        }
        unset($price);
 
        $tariff['PROPERTY_PRICE_VALUE'] /= $tariff['PROPERTY_USERS_COUNT_VALUE'];
    }
 
    $tariffs[$tariff["ID"]] = $tariff;
}
 
foreach($tariffs as $key){
    $result[] = $key["months_gifts"];
}
 
 
$values = array("val"=>array($result));
echo json_encode($values);
в результате

но нужно разложить этот массив по парам ключ - значение

Добавлено через 1 минуту
проблема все та же, js вообще отказывается показывать какую-либо информацию, только Object Object
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
27.01.2016, 11:20
Mashka_mulashka, я не знаю, как ещё объяснить, что в data.val лежит массив, который нельзя вывести через alert() или html()...
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
27.01.2016, 11:28  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Mashka_mulashka, я не знаю, как ещё объяснить, что в data.val лежит массив, который нельзя вывести через alert() или html()...
хорошо, но как-то же надо решить проблему) хотя бы как в пхп разложить это значение

Добавлено через 3 минуты
Цитата Сообщение от Jodah Посмотреть сообщение
что в data.val лежит массив, который нельзя вывести через alert() или html()...
и в моем js нету ни alert() ни html()
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
27.01.2016, 11:32
Цитата Сообщение от Mashka_mulashka Посмотреть сообщение
и в моем js нету ни alert() ни html()
Тоже самое касается .append()
Цитата Сообщение от Mashka_mulashka Посмотреть сообщение
но нужно разложить этот массив по парам ключ - значение
Так разложите. В JS ведь тоже есть циклы, перебирающие массивы.
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
27.01.2016, 12:49  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Так разложите. В JS ведь тоже есть циклы, перебирающие массивы.
можно кодом?

Добавлено через 1 час 13 минут
через вот такую штуку

JavaScript
1
data['val'].toSource();
удалось получить вот это

JSON
1
[{9:{months:1, text:"1_month_free"}, 10:{months:1, text:"1_month_free"}, 11:{months:1, text:"1_month_free"}, 12:{months:2, text:"2_month_free"}, 13:{months:2, text:"2_month_free"}, 14:{months:2, text:"2_month_free"}, 15:{months:2, text:"2_month_free"}, 16:{months:3, text:"3_month_free"}, 17:{months:3, text:"3_month_free"}, 18:{months:4, text:"4_month_free"}, 19:{months:4, text:"4_month_free"}, 20:{months:4, text:"4_month_free"}, 21:{months:5, text:"5_month_free"}, 22:{months:5, text:"5_month_free"}, 23:{months:5, text:"5_month_free"}, 24:{months:6, text:"6_month_free"}}]
что с этим делать не знаю))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.01.2016, 12:49
Помогаю со студенческими работами здесь

Что легче обрабатывать, массив или объект (ассоциативный массив)?
вопрос такой сейчас мне надо узнать что легче обрабатывать массив или объект? или &quot;что короче?&quot;

Как отдать массив в post
Как отдать массив в post если есть динамическая таблица и нужно отдать данные допустим некоторых ячеек (длина не известна)?

Создайте многомерный массив, содержащий названия книг, организованных по жанрам: ассоциативный массив, в котор
Создайте многомерный массив, содержащий названия книг, организованных по жанрам: ассоциативный массив, в котором имена полей будут разными...

Нужно преобразовать массив ассоциативных массивов в единый ассоциативный массив, а у меня никак не получается
Как преобразовать массив на скрине так, чтобы получился массив: =&gt; FB =&gt; FREE При этом длинна массива массивов изменчива....

Ассоциативный массив
Зрастье ;) Поставил себе задачу узнать оссоциативный массив в C#. Ну как бы узнал но те что хотел - Dictionary&lt;string, int&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru