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