Как исключить добавление ключа внутри объявления массива при определенных условий?
Можно ли как то исключить добавление ключа внутри объявления массива при определенных условий?
<?php
$array = [];
foreach ($orders as $order) {
$array[] = [
'account-id' => $order['account_id'],
'price' => $order['price'], // если $order['price'] === '0' то исключить этот ключ
'amount' => $order['amount'],
// Ключей и значений много и много подобных проверок
];
}
$request = $this->request($this->api_host .'v1/order', 'POST', $array);
Ниже пример, пробовал делать так, но там очень много подобных значений, как итог вариант не подходит:
<?php
$array = [];
foreach ($orders as $order) {
if ($order['price'] === '0') {
$array[] = [
'account-id' => $order['account_id'],
'amount' => $order['amount'],
];
} else {
$array[] = [
'account-id' => $order['account_id'],
'price' => $order['price']
'amount' => $order['amount'],
];
}
}
$request = $this->request($this->api_host .'v1/order', 'POST', $array);
Ответы (1 шт):
Автор решения: Deonis
→ Ссылка
Судя по вашему коду, я так понимаю, что в каждом условии вы пытаетесь добавлять полностью сформированный подмассив. Я бы предложил на каждой итерации создавать временный массив, который наполнять по мере условий, а потом его уже вносить в основной массив.
<?php
$array = [];
foreach ($orders as $order) {
// Данные, которые добавляются без условий
$tmp = [
'account-id' => $order['account_id'],
'amount' => $order['amount'],
];
if ($order['price'] !== '0') {
$tmp['price'] = $order['price'];
}
if (!empty($order['customer'])) {
$tmp['customer'] = $order['customer'];
}
/* ... другие условия ... */
// Добавляем в основной массив
$array[] = $tmp;
}
P.S. Если имена полей исходного массива $orders будут такие же, как и формируемого, то можно просто пробежаться по исходному и удалить/изменить значения по тем же условиям.