Корректировка структуры PHP-массива для правильной работы

Мне необходимо привести мой массив к определенной структуре, чтобы обеспечить корректную работу системы. Текущая реализация возвращает неверный формат данных.

Целевая структура массива

Требуемая структура должна выглядеть следующим образом:

  • Элемент seller: объект SimpleXMLElement
  • Элемент product_id: целочисленное значение
  • Элемент payments: ассоциативный массив, где каждый ключ (например, "new1", "new2") содержит:
    • Тип платежа (type)
    • Название (title)
    • Поля (fields) с параметрами price, currency и code

Текущая проблема

Мой код генерирует массив с некорректной структурой элемента payments. Вместо ассоциативного массива с ключами "new1", "new2" и т.д., я получаю индексированный массив, где каждый элемент содержит вложенный ассоциативный массив.

Исходный PHP-код

Вот текущая реализация обработчика:

$methods = ... ; // исходный массив методов
$ready = array();
for($i = 0; $i < count($methods); $i++){
    $arr = array('new'.$i+1 => [
            'type' => 'payment',
            'title' => strval($methods[$i]->name),
            'fields' => [
                "price" => strval($methods[$i]->currencies->currency->price),
                "currency" => strval($methods[$i]->currencies->currency->currency),
                "code" => strval($methods[$i]->code)
            ],
        ]
    );
    array_push($ready, $arr);
}

$payments = array(
    "seller" => $seller_name,
    "product_id" => $product_id,
    'payments' => $ready,
    );

Решение проблемы

Основная ошибка заключается в том, что код создает отдельный массив для каждого платежного метода и добавляет его в список. Вместо этого необходимо формировать единый ассоциативный массив, где ключами будут строки "new1", "new2" и т.д.

Исправленная версия кода:

$methods = ... ; // исходный массив методов
$ready = array(); // Теперь это будет ассоциативный массив

for($i = 0; $i < count($methods); $i++){
    $key = 'new' . ($i + 1); // Формируем ключ
    
    $ready[$key] = [
        'type' => 'payment',
        'title' => strval($methods[$i]->name),
        'fields' => [
            "price" => strval($methods[$i]->currencies->currency->price),
            "currency" => strval($methods[$i]->currencies->currency->currency),
            "code" => strval($methods[$i]->code)
        ]
    ];
}

$payments = array(
    "seller" => $seller_name,
    "product_id" => $product_id,
    'payments' => $ready, // Теперь $ready имеет правильную структуру
);

Ключевое изменение: вместо использования array_push() для добавления элементов в список, мы напрямую присваиваем значения ключам ассоциативного массива $ready. Это обеспечивает требуемую структуру данных.