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

Рейтинг: 0Ответов: 1Опубликовано: 26.05.2023

Можно ли как то исключить добавление ключа внутри объявления массива при определенных условий?

<?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Принят

Судя по вашему коду, я так понимаю, что в каждом условии вы пытаетесь добавлять полностью сформированный подмассив. Я бы предложил на каждой итерации создавать временный массив, который наполнять по мере условий, а потом его уже вносить в основной массив.

<?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 будут такие же, как и формируемого, то можно просто пробежаться по исходному и удалить/изменить значения по тем же условиям.