Перекомпозиция массива в PHP

#php #arrays

#php #массивы

Вопрос:

У меня есть этот массив, который необходимо преобразовать или перекомпозировать, чтобы сформировать новый массив.

Исходный массив выглядит следующим образом

 Array
(
    [0] => Array
        (
            [amount] => 1439.53
            [c_year] => 2021
            [c_month] => 9
            [short_month] => Sep
        )

    [1] => Array
        (
            [amount] => 1448.13
            [c_year] => 2021
            [c_month] => 10
            [short_month] => Oct
        )

)
 

Примечание: месяц = [c_month].’-‘.[c_year]

Мне нужно, чтобы он выглядел как приведенный ниже массив

 Array
(
    [0] => Array
        (
          [month] => Sept-9
          [amount] => 1439.53
         )
    [1] => Array
        (
          [month] => Oct-9
          [amount] => 1448.13
        )
)
 

Я попробовал несколько циклов, но, похоже, не смог преобразовать или перекомпонировать его.

Мои усилия перечислены ниже.

 ```
foreach ($resultsArray as $key=>$value) {
    $monthsFees = array('month'=>$value['c_year'].'-'.$value['c_month']);array('amount'=>$value['amount']);

    }
```
 

Результат:

 Array
(
    [month] => 2021-10
)


```
foreach ($resultsArray as $key=>$value) {
    array_push($monthsFees,'amount',$value['amount'],'month' ,$value['short_month'].'-'.$value['c_year']);
    }
```
 

Результат:

 Array
(
    [0] => amount
    [1] => 1439.53
    [2] => month
    [3] => Sep-2021
    [4] => amount
    [5] => 1448.13
    [6] => month
    [7] => Oct-2021
)


```
$feesLast6MonthsArray['month']= $value['c_year'].'-'.$value['c_month'];
      $feesLast6MonthsArray['amount']=$value['amount'];
}
```
 

Результат:

 Array
(
    [month] => 2021-10
    [amount] => 1448.13
)
 

Комментарии:

1. Откуда 9 берется Oct-9 и что случилось с годами?

2. Кроме того, с var_dump() / output очень сложно работать print_r() . Не могли бы вы предоставить массивы как фактические (с хорошим отступом) структуры данных PHP

3. Каждый пример желаемого результата выглядит по-разному. Не могли бы вы потратить некоторое время, чтобы уточнить свои требования

4. Я добавил все, что мог. Пожалуйста, дайте время для исправления, прежде чем отмечать это:-(

Ответ №1:

Вы можете использовать array_map() для преобразования массива в то, что вы хотите

 $monthsFees = array_map(function($fee) {
    return [
        "month"  => sprintf("%s-%s",
             $fee["c_month"], 
             $fee["c_year"]
        ), // [c_month].'-'.[c_year]
        "amount" => $fee["amount"]
    ];
}, $resultsArray);
 

Демонстрация ~ https://3v4l.org/0trIY