Взять содержимое из json php

211
21 февраля 2019, 09:40

Подскажите, пожалуйста, есть такой код

<?php 
//адрес сайта
$url = '=';
// получаем содержимое сайта
$json = file_get_contents($url);
// преобразуем в массив
$array = json_decode($json, true);
// выводим значение переменной contactId
echo $array['orders']['orderid'];
?>

И такой json:

{"status":"ok","orders":[{"orderid":"29760","number":"29760","ordercode":"2013983770","ordername":"sx \u0434\u043b\u044f \u0426\u0438\u0444\u0440\u0430","ordersource":false,"clientid":"13121","clientname":"\u0412\u044f\u0447\u0435\u0441\u043b\u0430\u0432 \u0414\u0430\u043d\u0438\u043b\u044c\u0447\u0435\u043d\u043a\u043e","clientemail":"sl@y.ua","clientphone":"","clientaddress":"","managerid":"5","cdate":"2018-01-18 13:37:38","dateto":"2018-10-17 13:37:00","deliveriID":"0","deliverinote":"","deliveriprice":"0.00","paymentid":"0","storagetoid":"0","storagetoexternalid":"","sum":"0.00","margin":"0.00","sumbase":"0.00","currency":"UAH","statusid":"159","statusname":"\u041e\u0442\u043a\u0430\u0437","statuscolor":"#ff6969","workflowid":"25","workflowname":" \u0441\u0438\u0441\u0442\u0435\u043c\u0430","contractorid":"0","contractorname":null,"customfields":[{"key":"\u041f\u0440\u0438\u0447\u0438\u043d\u0430\u043e\u0442\u043a\u0430\u0437\u0430","name":"\u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u043e\u0442\u043a\u0430\u0437\u0430","value":"\u0418\u0433\u043d\u043e\u0440"}],"products":[],"clientcompany":"\u0414\u0430\u043d\u0438\u043b\u044c\u0447\u0435\u043d\u043a\u043e \u0412\u044f\u0447\u0435\u0441\u043b\u0430\u0432","clientcode":"22986425","weight":0,"gabarite":0}]}

Не могу вывести количество orders.
Подскажите, пожалуйста, как это сделать.

Answer 1
print_r ($array->orders);
print_r ($array->orders[0]->orderid);

-если есть несколько order как получить из их всех информацию?

foreach($array->orders as $order) {
   echo $order->orderid;
}
Answer 2

вы не совсем верно обращаетесь к обработанному массиву. После обработки json_decode

массив имеет вид:

Array
(
    [status] => ok
    [orders] => Array
        (
            [0] => Array
                (
                    [orderid] => 29760
                    [number] => 29760
                    [ordercode] => 2013983770
                    [ordername] => sx для Цифра
                    [ordersource] => 
                    [clientid] => 13121
                    [clientname] => Вячеслав Данильченко
                    [clientemail] => sl@y.ua
                    [clientphone] => 
                    [clientaddress] => 
                    [managerid] => 5
                    [cdate] => 2018-01-18 13:37:38
                    [dateto] => 2018-10-17 13:37:00
                    [deliveriID] => 0
                    [deliverinote] => 
                    [deliveriprice] => 0.00
                    [paymentid] => 0
                    [storagetoid] => 0
                    [storagetoexternalid] => 
                    [sum] => 0.00
                    [margin] => 0.00
                    [sumbase] => 0.00
                    [currency] => UAH
                    [statusid] => 159
                    [statusname] => Отказ
                    [statuscolor] => #ff6969
                    [workflowid] => 25
                    [workflowname] =>  система
                    [contractorid] => 0
                    [contractorname] => 
                    [customfields] => Array
                        (
                            [0] => Array
                                (
                                    [key] => Причинаотказа
                                    [name] => Причина отказа
                                    [value] => Игнор
                                )
                        )
                    [products] => Array
                        (
                        )
                    [clientcompany] => Данильченко Вячеслав
                    [clientcode] => 22986425
                    [weight] => 0
                    [gabarite] => 0
                )
        )
)

Как видите, вы пропустили ключ 0

Поэтому вывести нужные данные вы можете вот так:

echo $array['orders'][0]['orderid'];
echo $array['orders'][0]['number'];

А если заказов у вас много и нужно из каждого забирать указанные поля, то обычным перебором:

$orders = [];
foreach ($array['orders'] as $order) {
   $orders[$order['orderid']] = $order['number']; // ключи это ID заказов, значения это номера. Тут уж в зависимости от задачи как нужно укомплектовать значения
}

при такой обработке данных можно отдельно вывести все ID заказов при помощи

echo implode (', ', array_keys($orders)) // ID заказов в строку через запятую
echo implode (', ', $orders) // номера заказов в строку через запятую

implode - ссылка на доки

array_keys - ссылка на доки

Answer 3

orders это массив, который может содержать n-количество массивов. В вашем случае он один, с индексом 0.

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

$array['orders'][0]['orderid'];

Либо пробежать циклом foreach (если нужно обработать все массивы, в том случае если их будет больше одного)

foreach ($array['orders'] as $item)
{
    echo $item['orderid'];
}
READ ALSO
Как импортировать данные xlsx с формулами?

Как импортировать данные xlsx с формулами?

Как можно в wordpress импортировать данные xlsx, обработать эти данные и вывести результат на фронтенд? Также в файле xlsx могут быть формулы, те

130
Ошибка вывода постов на другой странице (файле) Wordpress

Ошибка вывода постов на другой странице (файле) Wordpress

Имеется ошибка при выводе постов - дублируются посты в странице где открыт определенный пост, в файле footerphp я добавил следующий фрагмент кода...

184
Переместил storage папку в public, безопасно ли это?

Переместил storage папку в public, безопасно ли это?

Веб Сервер не позволяет создать ссылку на storage папку, решил вопрос просто переместив папку storage в public, все работает,

197
Как хранить плотную матрицы с целью параллельного умножения?

Как хранить плотную матрицы с целью параллельного умножения?

Какой наилучший способ для хранения плотной матрицы с целью параллельного умножения матрицы на матрицу?

158