Запись в txt цикла массива php

192
23 февраля 2019, 14:30

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

{"status":"ok","orders":[{"orderid":"32977","number":"32977","ordercode":"","ordername":"\u041e\u0431\u043c\u0435\u043d \u0432 1\u0441","ordersource":false,"clientid":"13354","clientname":"\u0421\u0430\u043c\u043e\u0445\u0438\u043d \u0412\u043b\u0430\u0434\u0438\u0441\u043b\u0430\u0432","clientemail":"samokhin.contrust@gmail.com","clientphone":"380660785767","clientaddress":"","managerid":"0","cdate":"2018-01-17 10:04:36","dateto":"","deliveriID":"0","deliverinote":"","deliveriprice":"0.00","paymentid":"0","storagetoid":"0","storagetoexternalid":"","sum":"0.00","margin":"0.00","sumbase":"0.00","currency":"UAH","statusid":"133","statusname":"\u0417\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430","statuscolor":"#949494","workflowid":"19","workflowname":"\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430","contractorid":"0","contractorname":null,"customfields":[],"products":[],"clientcompany":"Contrust","clientcode":"28452925","weight":0,"gabarite":0},{"orderid":"32978","number":"32978","ordercode":"","ordername":"\u0417\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430","ordersource":false,"clientid":"13354","clientname":"\u0421\u0430\u043c\u043e\u0445\u0438\u043d \u0412\u043b\u0430\u0434\u0438\u0441\u043b\u0430\u0432","clientemail":"234","clientphone":"234","clientaddress":"","managerid":"0","cdate":"2018-01-17 09:46:12","dateto":"","deliveriID":"0","deliverinote":"","deliveriprice":"0.00","paymentid":"0","storagetoid":"0","storagetoexternalid":"","sum":"0.00","margin":"0.00","sumbase":"0.00","currency":"UAH","statusid":"133","statusname":"\u0417\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430","statuscolor":"#949494","workflowid":"19","workflowname":"\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430","contractorid":"0","contractorname":null,"customfields":[],"products":[],"clientcompany":"Contrust","clientcode":"28452925","weight":0,"gabarite":0}]}

Есть код с помощью которого запускаем цикл массивов и выводим его.

foreach ($array['orders'] as $item)
{
    echo $item['orderid'];
}

Не могу записать в json все эти orderid

file_put_contents(
    'chat.json', 
    json_encode(['command' => $item['orderid']], JSON_UNESCAPED_UNICODE) 
);

Так записывается только один orderid, но не все.

Answer 1

Вам нужно собрать сначала полный массив идентификаторов и его уже записывать в файл.

$myArray = [
    'command' => $orderIDsArray, //массив из всех идентификаторов
];
json_encode($myArray) // где $myArray заранее собранный массив.

а если вы пытаетесь сделать это в цикле, то получите много кодированных строк, а не цельный json.

В файле вы видите только 1 идентификатор из-за того, что не правильно используете file_put_contents в этих целях. Для добавления новых строк в файл и чтобы не перетирать уже существующие эту функцию стоит использовать с флагом FILE_APPEND

Подробнее в документации file_put_contents

По запросу пример кода с выборкой и записью:

$json = ''; // тут json который необходимо обработать
$data = json_decode($json, true);
$orders = [];
$file = 'my_file.txt';
foreach ($data['orders'] as $order) {
    echo $order['orderid'] . '<br>'; // если нужно посмотреть
    $orders[] = $order['orderid'];
}
file_put_contents ($file, implode(PHP_EOL , $orders)); // вместо PHP_EOL можно поставить любой нужный знак для удобства чтения
READ ALSO
Как в php laravel ограничить контент записи?

Как в php laravel ограничить контент записи?

Как в php laravel ограничить контент записи? для слайдера хочу вывод сделать

147
csrf токен ошибка в генерации

csrf токен ошибка в генерации

Всем привет, написал небольшой код:

169
file_put_contents

file_put_contents

Подскажите пожалуйста, есть код который записывает все orderid из цикла в текстовый файл

143