Корректировка структуры 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. Это обеспечивает требуемую структуру данных.