Работа с json_decode/json_encode.Сохранение массивов в БД.
Есть вот такой массив
Нужен доступ к элементу customer, который есть json
Использую код
$prs = json_decode($parameters['customer'],true);
Делаю правки коррективы,какие мне надо
$prs['customFields']['promocode'] = $prs['customFields']['kupon'];
unset($prs['customFields']['kupon']);
$parameters['customer'] = json_encode($prs);
Продолжение другой случай
Получили вот такой stdClass Object
Array ( [0] => stdClass Object ( [date] => 1552484113 [from_id] => 100542244 [id] => 1 [out] => 0 [peer_id] => 100542244 [text] => Рто тестовое сообщение, чтобы выполнить тестовое задание1 [conversation_message_id] => 1 [fwd_messages] => Array ( ) [important] => [random_id] => 0 [attachments] => Array ( ) [is_hidden] => ) [1] => stdClass Object ( [date] => 1552484731 [from_id] => -102041217 [id] => 2 [out] => 1 [peer_id] => 100542244 [text] => Спасибо, что написали нам [conversation_message_id] => 2 [fwd_messages] => Array ( ) [important] => [random_id] => 929026351 [attachments] => Array ( ) [admin_author_id] => 100542244 [is_hidden] => ) [2] => stdClass Object ( [date] => 1552484883 [from_id] => 100542244 [id] => 3 [out] => 0 [peer_id] => 100542244 [text] => Второе сообщение для выполения тестового задания [conversation_message_id] => 3 [fwd_messages] => Array ( ) [important] => [random_id] => 0 [attachments] => Array ( ) [is_hidden] => ) [3] => stdClass Object ( [date] => 1552484905 [from_id] => 100542244 [id] => 4 [out] => 0 [peer_id] => 100542244 [text] => Третье сообщение для выполения тестового задания [conversation_message_id] => 4 [fwd_messages] => Array ( ) [important] => [random_id] => 0 [attachments] => Array ( ) [is_hidden] => ) [4] => stdClass Object ( [date] => 1552484920 [from_id] => 100542244 [id] => 5 [out] => 0 [peer_id] => 100542244 [text] => Четвертое сообщение для выполнения тестового задания [conversation_message_id] => 5 [fwd_messages] => Array ( ) [important] => [random_id] => 0 [attachments] => Array ( ) [is_hidden] => ) [5] => stdClass Object ( [date] => 1552484931 [from_id] => 100542244 [id] => 6 [out] => 0 [peer_id] => 100542244 [text] => Пятое сообщение для выполнения тестового задания [conversation_message_id] => 6 [fwd_messages] => Array ( ) [important] => [random_id] => 0 [attachments] => Array ( ) [is_hidden] => ) [6] => stdClass Object ( [date] => 1552484938 [from_id] => 100542244 [id] => 7 [out] => 0 [peer_id] => 100542244 [text] => 6 сообщение для выполнения тестового задания [conversation_message_id] => 7 [fwd_messages] => Array ( ) [important] => [random_id] => 0 [attachments] => Array ( ) [is_hidden] => ) [7] => stdClass Object ( [date] => 1552484944 [from_id] => 100542244 [id] => 8 [out] => 0 [peer_id] => 100542244 [text] => 7 сообщение для выполнения тестового задания [conversation_message_id] => 8 [fwd_messages] => Array ( ) [important] => [random_id] => 0 [attachments] => Array ( ) [is_hidden] => ) [8] => stdClass Object ( [date] => 1552484952 [from_id] => 100542244 [id] => 9 [out] => 0 [peer_id] => 100542244 [text] => 8 сообщение для выполнения тестового задания [conversation_message_id] => 9 [fwd_messages] => Array ( ) [important] => [random_id] => 0 [attachments] => Array ( ) [is_hidden] => ) [9] => stdClass Object ( [date] => 1552484959 [from_id] => 100542244 [id] => 10 [out] => 0 [peer_id] => 100542244 [text] => 9 сообщение для выполнения тестового задания [conversation_message_id] => 10 [fwd_messages] => Array ( ) [important] => [random_id] => 0 [attachments] => Array ( ) [is_hidden] => ) [10] => stdClass Object ( [date] => 1552484967 [from_id] => 100542244 [id] => 11 [out] => 0 [peer_id] => 100542244 [text] => 10 сообщение для выполнения тестового задания [conversation_message_id] => 11 [fwd_messages] => Array ( ) [important] => [random_id] => 0 [attachments] => Array ( ) [is_hidden] => ) [11] => stdClass Object ( [date] => 1552485703 [from_id] => -102041217 [id] => 12 [out] => 1 [peer_id] => 100542244 [text] => запрос РїСЂРёРЅСЏС‚ [conversation_message_id] => 12 [fwd_messages] => Array ( ) [important] => [random_id] => 1916962769 [attachments] => Array ( ) [admin_author_id] => 100542244 [is_hidden] => ) )
Преобразуем в массив php
$massiv = json_decode($query);
print_r($massiv->{‘response’}->{‘items’});
Если нужно перебрать элементы массива items
foreach ($massiv->{‘response’}->{‘items’} as $key => $value) {
echo $value->{‘from_id’};
}
Если нужно извлечь отдельный элемент по индексу
echo $massiv->{‘response’}->items[1]->date
Чтобы упростить синтаксис и оперировать результатом
json_decode как обычным php -массивов, нужно изначально использовать функцию get_object_vars() для всех stdClass Object. Например,
$results=json_decode($query); $first = get_object_vars($results[0]); $all=array(); foreach($results as $result) $all[]=get_object_vars($result); echo $all[15]['conversation_message_id'];
Второй способ просто использовать
json_decode(json_encode($results),true);
Как в БД хранить массивы
Наполняем массив
$save=array('offer'=> array('tender_position'=>'1', 'offer_number'=>'2', 'company'=>'3', 'postavki'=>'4', 'opis'=>'5', 'proname'=>'6', 'proamount'=>'7', 'proprice'=>'8', 'prosumma'=>'9', 'prosummapdv'=>'10', 'prototal'=>'11', 'country'=>'12', 'manufacturer'=>'13', 'typepayment'=>'14', 'toda'=>'15.06.2019', 'product'=> array('name'=>'16', 'amount'=>'17', 'price'=>'18', 'total'=>'19', 'summa'=>'20', 'summapdv'=>'21'), ) );
Преобразуем $save в json-формат и пишем в БД
$filed=json_encode($save);
Получится вот такая запись в поле таблицы БД после выполнения sql-запроса UPDATE/INSERT
{"offer":{"tender_position":"1","offer_number":"2","company":"3","postavki":"4","opis":"5","proname":"6","proamount":"7","proprice":"8","prosumma":"9","prosummapdv":"10","prototal":"11","country":"12","manufacturer":"13","typepayment":"14","product":{"name":"15","amount":"16","price":"17","total":"18","summa":"19","summapdv":"20"},"today":"21"}}
Для сохранение такой записи в БД поле таблицы должно быть типа «Text»
Кодирование кириллицы
Чтобы русские буквы остались без изменения после раскодирования необходимо использовать второй параметр в функции json_encode($document,JSON_UNESCAPED_UNICODE)
Конвертирования массива array в stdclass
‘Вселенная (Universe)’,
‘galaxy’ => ‘Млечный путь (Milky way)’,
‘planetary-system’ => ‘Солнечная система (Solar system)’,
‘planet’ => ‘Земля (Earth)’,
‘continent’ => ‘Европа (Europe)’,
‘country’ => ‘Россия (Russia)’,
‘city’ => ‘Москва (Moscow)’
);
// приводим массив к типу object
$object = (object)$array;
// выводим массив
print_r($object);
В результате получаем
stdClass Object ( [0] => Вселенная (Universe) [galaxy] => Млечный путь (Milky way) [planetary-system] => Солнечная система (Solar system) [planet] => Земля (Earth) [continent] => Европа (Europe) [country] => Россия (Russia) [city] => Москва (Moscow) )Обращение к членам объекта
galaxy; // Млечный путь (Milky way) echo $object->{«planetary-system»}; // Солнечная система (Solar system) // или так $key = «planetary-system»; echo $object->$key; // Солнечная система (Solar system) $value) { echo $key . ‘: ‘ . $value . ‘‘; }