@Formula_1

Как сформировать такой многомерный массив?

Всем привет. У меня есть такой массив:
$data = [
			[
				"name" => "Москва",
				"address" => "Тверская ул., 10, Москва",
				"zip" => 117334
			],
			[
				"name" => "Москва",
				"address" => "Тверская ул., 10, Москва",
				"zip" => 117334
			],
			[
				"name" => "Москва",
				"address" => "Тверская ул., 10, Москва",
				"zip" => 117334
			],
			[
				"name" => "Санкт-Петербург",
				"address" => "Невский пр., 14, Санкт-Петербург",
				"zip" => 191186
			],
			[
				"name" => "Санкт-Петербург",
				"address" => "Невский пр., 14, Санкт-Петербург",
				"zip" => 191186
			],
			[
				"name" => "Санкт-Петербург",
				"address" => "Невский пр., 14, Санкт-Петербург",
				"zip" => 191186
			],
			[
				"name" => "Нижний Новгород",
				"address" => "Авиаторская ул., 12, Нижний Новгород, Нижегородская обл.",
				"zip" => 603034
			],
			[
				"name" => "Нижний Новгород",
				"address" => "Авиаторская ул., 12, Нижний Новгород, Нижегородская обл.",
				"zip" => 603034
			],
			[
				"name" => "Нижний Новгород",
				"address" => "Авиаторская ул., 12, Нижний Новгород, Нижегородская обл.",
				"zip" => 603034
			]
];

Из него нужно создать массив вида:
$data = [
			[
				"name" => "Москва",
				"list" => [
					[
						"name" => "Москва",
						"address" => "Тверская ул., 10, Москва",
						"zip" => 117334
					],
					[
						"name" => "Москва",
						"address" => "Тверская ул., 10, Москва",
						"zip" => 117334
					],
					[
						"name" => "Москва",
						"address" => "Тверская ул., 10, Москва",
						"zip" => 117334
					]
				]
			],
			[
				"name" => "Санкт-Петербург",
				"list" => [
					[
						"name" => "Санкт-Петербург",
						"address" => "Невский пр., 14, Санкт-Петербург",
						"zip" => 191186
					],
					[
						"name" => "Санкт-Петербург",
						"address" => "Невский пр., 14, Санкт-Петербург",
						"zip" => 191186
					],
					[
						"name" => "Санкт-Петербург",
						"address" => "Невский пр., 14, Санкт-Петербург",
						"zip" => 191186
					]
				]
			],
			[
				"name" => "Нижний Новгород",
				"list" => [
					[
						"name" => "Нижний Новгород",
						"address" => "Авиаторская ул., 12, Нижний Новгород, Нижегородская обл.",
						"zip" => 603034
					],
					[
						"name" => "Нижний Новгород",
						"address" => "Авиаторская ул., 12, Нижний Новгород, Нижегородская обл.",
						"zip" => 603034
					],
					[
						"name" => "Нижний Новгород",
						"address" => "Авиаторская ул., 12, Нижний Новгород, Нижегородская обл.",
						"zip" => 603034
					]
				]
			]
];

Подскажите, пожалуйста, как это можно сделать?
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ответы на вопрос 1
Stimulate
@Stimulate
могу
<?php

$data = [
      [
        "name" => "Москва",
        "address" => "Тверская ул., 10, Москва",
        "zip" => 117334
      ],
      [
        "name" => "Москва",
        "address" => "Тверская ул., 10, Москва",
        "zip" => 117334
      ],
      [
        "name" => "Москва",
        "address" => "Тверская ул., 10, Москва",
        "zip" => 117334
      ],
      [
        "name" => "Санкт-Петербург",
        "address" => "Невский пр., 14, Санкт-Петербург",
        "zip" => 191186
      ],
      [
        "name" => "Санкт-Петербург",
        "address" => "Невский пр., 14, Санкт-Петербург",
        "zip" => 191186
      ],
      [
        "name" => "Санкт-Петербург",
        "address" => "Невский пр., 14, Санкт-Петербург",
        "zip" => 191186
      ],
      [
        "name" => "Нижний Новгород",
        "address" => "Авиаторская ул., 12, Нижний Новгород, Нижегородская обл.",
        "zip" => 603034
      ],
      [
        "name" => "Нижний Новгород",
        "address" => "Авиаторская ул., 12, Нижний Новгород, Нижегородская обл.",
        "zip" => 603034
      ],
      [
        "name" => "Нижний Новгород",
        "address" => "Авиаторская ул., 12, Нижний Новгород, Нижегородская обл.",
        "zip" => 603034
      ]
];

$new_data = [];

foreach ($data as $row) {
	if (!array_key_exists($row['name'], $new_data)) {
		$new_data[$row['name']] = [];
	}
	
	$new_data[$row['name']][] = $row;
}
		
echo '<pre>';
    print_r($new_data);
echo '</pre>';
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы