Преобразуйте многомерный массив PHP, чтобы значения становились ключами, а другие значения становились массивами для каждого ключа. - PullRequest
0 голосов
/ 25 октября 2019

У меня есть:

    ['countryCode' => 11, 'postalCode' => 12345],
    ['countryCode' => 11, 'postalCode' => 12346],
    ['countryCode' => 11, 'postalCode' => 12347],
    ['countryCode' => 11, 'postalCode' => 12348],
    ['countryCode' => 11, 'postalCode' => 12349],
    ['countryCode' => 12, 'postalCode' => 12345],
    ['countryCode' => 12, 'postalCode' => 12346],
    ['countryCode' => 12, 'postalCode' => 12347],
    ['countryCode' => 12, 'postalCode' => 12348],
    ['countryCode' => 12, 'postalCode' => 12349],
];

Но я хочу:

    '11' => ['12345, 12346, 12347, 12348, 12349'], '12' => ['12345, 12346, 12347, 12348, 12349']
];

Я пытался:

$countries = array_column($data, 'countryCode');
$countries = array_unique($countries);
$countries = array_fill_keys($countries, []);

function makeArrays(&$countries, $data){
    foreach ($countries as $countryId => $postalCodes){
        foreach ($data as $item) {
            if ($item['countryCode'] == $countryId) {
                array_push($postalCodes, $item['postalCode']);
            }
        }
    }
    return $countries;
}

makeArrays($countries, $data);

Когда я var_dump, хотя функция makeArrays,ключи идентификатора страны не заполнены массивом почтовых индексов, как я ожидал:

array(2) {
  [11]=>
  array(0) {
  }
  [12]=>
  array(0) {
  }
}

Как получить массив каждого ключа для заполнения ожидаемыми значениями?

1 Ответ

3 голосов
/ 25 октября 2019

Вы можете перебрать массив и установить значения в качестве ключей.

    $arr = [
    ['countryCode' => 11, 'postalCode' => 12345],
    ['countryCode' => 11, 'postalCode' => 12346],
    ['countryCode' => 11, 'postalCode' => 12347],
    ['countryCode' => 11, 'postalCode' => 12348],
    ['countryCode' => 11, 'postalCode' => 12349],
    ['countryCode' => 12, 'postalCode' => 12345],
    ['countryCode' => 12, 'postalCode' => 12346],
    ['countryCode' => 12, 'postalCode' => 12347],
    ['countryCode' => 12, 'postalCode' => 12348],
    ['countryCode' => 12, 'postalCode' => 12349],
]; 

//
$newArr = [];
foreach ($arr as $key => $val) {
    $newArr[$val['countryCode']][] = $val['postalCode'];
}
print_r($newArr);
...