Как из двух массивов собрать нужный
есть два массива: Первый
Array
(
[0] => Array
(
[id] => 1
[district_name] => ЦАО
)
[1] => Array
(
[id] => 2
[district_name] => САО
)
[2] => Array
(
[id] => 3
[district_name] => СВАО
)
[3] => Array
(
[id] => 4
[district_name] => ВАО
)
[4] => Array
(
[id] => 5
[district_name] => ЮВАО
)
[5] => Array
(
[id] => 6
[district_name] => ЮАО
)
[6] => Array
(
[id] => 7
[district_name] => ЮЗАО
)
[7] => Array
(
[id] => 8
[district_name] => ЗАО
)
[8] => Array
(
[id] => 9
[district_name] => СЗАО
)
[9] => Array
(
[id] => 10
[district_name] => ЗелАО
)
)
И второй:
Array
(
[area_name] => Array
(
[0] => Арбат
[1] => Басманный
[2] => Замоскворечье
[3] => Красносельский
[4] => Мещанский
[5] => Пресненский
[6] => Таганский
[7] => Тверской
[8] => Хамовники
[9] => Якиманка
)
)
Array
(
[area_name] => Array
(
[0] => Аэропорт
[1] => Беговой
[2] => Бескудниковский
[3] => Войковский
[4] => Головинский
[5] => Дегунино Восточное
[6] => Дегунино Западное
[7] => Дмитровский
[8] => Коптево
[9] => Левобережный
[10] => Молжаниновский
[11] => Савёловский
[12] => Сокол
[13] => Тимирязевский
[14] => Ховрино
[15] => Хорошёвский
)
)
Array
(
[area_name] => Array
(
[0] => Алексеевский
[1] => Алтуфьевский
[2] => Бабушкинский
[3] => Бибирево
[4] => Бутырский
[5] => Лианозово
[6] => Лосиноостровский
[7] => Марфино
[8] => Марьина роща
[9] => Медведково Северное
[10] => Медведково Южное
[11] => Останкинский
[12] => Отрадное
[13] => Ростокино
[14] => Свиблово
[15] => Северный
[16] => Ярославский
)
)
Array
(
[area_name] => Array
(
[0] => Богородское
[1] => Вешняки
[2] => Восточный
[3] => Гольяново
[4] => Ивановское
[5] => Измайлово Восточное
[6] => Измайлово
[7] => Измайлово Северное
[8] => Косино-Ухтомский
[9] => Метрогородок
[10] => Новогиреево
[11] => Новокосино
[12] => Перово
[13] => Преображенское
[14] => Соколиная гора
[15] => Сокольники
)
)
Array
(
[area_name] => Array
(
[0] => Выхино-Жулебино
[1] => Капотня
[2] => Кузьминки
[3] => Лефортово
[4] => Люблино
[5] => Марьино
[6] => Некрасовка
[7] => Нижегородский
[8] => Печатники
[9] => Рязанский
[10] => Текстильщики
[11] => Южнопортовый
)
)
Array
(
[area_name] => Array
(
[0] => Бирюлёво Восточное
[1] => Бирюлёво Западное
[2] => Братеево
[3] => Даниловский
[4] => Донской
[5] => Зябликово
[6] => Москворечье-Сабурово
[7] => Нагатино-Садовники
[8] => Нагатинский затон
[9] => Нагорный
[10] => Орехово-Борисово Северное
[11] => Орехово-Борисово Южное
[12] => Царицыно
[13] => Чертаново Северное
[14] => Чертаново Центральное
[15] => Чертаново Южное
)
)
Array
(
[area_name] => Array
(
[0] => Академический
[1] => Бутово Северное
[2] => Бутово Южное
[3] => Гагаринский
[4] => Зюзино
[5] => Коньково
[6] => Котловка
[7] => Ломоносовский
[8] => Обручевский
[9] => Тёплый Стан
[10] => Черёмушки
[11] => Ясенево
)
)
Array
(
[area_name] => Array
(
[0] => Внуково
[1] => Дорогомилово
[2] => Крылатское
[3] => Кунцево
[4] => Можайский
[5] => Ново-Переделкино
[6] => Очаково-Матвеевское
[7] => Проспект Вернадского
[8] => Раменки
[9] => Солнцево
[10] => Тропарёво-Никулино
[11] => Филёвский парк
[12] => Фили-Давыдково
)
)
Array
(
[area_name] => Array
(
[0] => Куркино
[1] => Митино
[2] => Покровское-Стрешнево
[3] => Строгино
[4] => Тушино Северное
[5] => Тушино Южное
[6] => Хорошёво-Мневники
[7] => Щукино
)
)
Array
(
[area_name] => Array
(
[0] => Крюково
[1] => Матушкино
[2] => Савёлки
[3] => Силино
[4] => Старое Крюково
)
)
Как из этих двух собрать вот такой массив:
Array
(
[area_name] => Array
(
[1] => Арбат
[1] => Басманный
[1] => Замоскворечье
[1] => Красносельский
[1] => Мещанский
[1] => Пресненский
[1] => Таганский
[1] => Тверской
[1] => Хамовники
[1] => Якиманка
)
)
Array
(
[area_name] => Array
(
[2] => Аэропорт
[2] => Беговой
[2] => Бескудниковский
[2] => Войковский
[2] => Головинский
[2] => Дегунино Восточное
[2] => Дегунино Западное
[2] => Дмитровский
[2] => Коптево
[2] => Левобережный
[2] => Молжаниновский
[2] => Савёловский
[2] => Сокол
[2] => Тимирязевский
[2] => Ховрино
[2] => Хорошёвский
)
)
Ну или чтобы было вот так:
Array
(
[area_name] => Array
(
[0] => Арбат
[1] => Басманный
[2] => Замоскворечье
[3] => Красносельский
[4] => Мещанский
[5] => Пресненский
[6] => Таганский
[7] => Тверской
[8] => Хамовники
[9] => Якиманка
[id] => 1
)
)
Array
(
[area_name] => Array
(
[0] => Аэропорт
[1] => Беговой
[2] => Бескудниковский
[3] => Войковский
[4] => Головинский
[5] => Дегунино Восточное
[6] => Дегунино Западное
[7] => Дмитровский
[8] => Коптево
[9] => Левобережный
[10] => Молжаниновский
[11] => Савёловский
[12] => Сокол
[13] => Тимирязевский
[14] => Ховрино
[15] => Хорошёвский
[id] => 2
)
)
Объясню для чего это нужно, есть таблица geo_area, у нее есть столбцы: id, district_id и area_name Нужно чтобы из второго массива имена вставились в area_name, а из первого массива в соответствии с принадлежностью area_name к area_district вставились в district_id id записи... Не знаю понятно ли объяснил, в общем это связь один ко многим, но что-то вот застрял с решением...
Ответы (2 шт):
Очень странные структуры. По-моему, оптимально было бы собрать данные в структуру типа:
Array
(
[0] => Array
(
[id] => 1
[district_name] => ЦАО,
[area_name] => Array
(
[0] => Арбат
[1] => Басманный
[2] => Замоскворечье
[3] => Красносельский
[4] => Мещанский
[5] => Пресненский
[6] => Таганский
[7] => Тверской
[8] => Хамовники
[9] => Якиманка
)
)
[1] => Array
(
[id] => 2
[district_name] => САО
[area_name] => Array
(
[0] => Аэропорт
[1] => Беговой
[2] => Бескудниковский
[3] => Войковский
[4] => Головинский
[5] => Дегунино Восточное
[6] => Дегунино Западное
[7] => Дмитровский
[8] => Коптево
[9] => Левобережный
[10] => Молжаниновский
[11] => Савёловский
[12] => Сокол
[13] => Тимирязевский
[14] => Ховрино
[15] => Хорошёвский
)
)
...
)
foreach(array_keys($ar1) as $key) {
$ar1[$key]['area_name'] = $ar2[$key]['area_name'];
}
Задача решена, массив собрал как надо. Может кому понадобится, вобщем парсил сайт по округам, районам и улицам, часть кода по моей задаче:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
setlocale(LC_ALL, 'ru_RU');
date_default_timezone_set('Europe/Moscow');
header('Content-type: text/html; charset=utf-8');
require_once('phpQuery/phpQuery.php');
function print_arr($arr){
echo '<pre>'.print_r($arr, true).'</pre>';
}
$url = 'http://mosopen.ru/regions';
$file = file_get_contents($url);
$doc = phpQuery::newDocument($file);
$all = $doc->find('#regions_by_districts td p br')->remove();
$all = $doc->find('#regions_by_districts td p strong a')->addClass('district');
$all = $doc->find('#regions_by_districts td p > a')->addClass('area');
$all = $doc->find('#regions_by_districts td');
// часть из этих переменных тут не используется, код большой, я же привел только часть кода.
$data['district_name'] = array();
$data['district_id'] = array();
$data['area_id'] = array();
$data['street_id'] = array();
$data['area_name'] = array();
$data['street_id'] = array();
$data['street_name'] = array();
$test = [];
$i = 0;
foreach ($all as $key => $val){
$i++;
$all_item = pq($val);
$all_name_district = $all_item->find('.district')->text();
$area_name = $all_item->find('.area')->text();
$area_name = preg_split('/\r\n|\r|\n/', $area_name);
array_pop($area_name);
foreach ($area_name as $k => $v) {
$area_name['area_name'][] = $area_name[$k];
unset($area_name[$k]);
}
$data['area_name'] = $area_name;
$data['district_name'][$all_name_district] = $data['area_name'];
$a['district_id'] = $i;
$test[] = array_merge($data['district_name'][$all_name_district], $a);
//$data['district_name'][] = $all_name_district;
}
// Тут запрос на добавление в таблицу бд
try {
$sth = new PDO("mysql:host=localhost;dbname=is55", $user, $pass);
$sql_part = '';
foreach ($test as $key => $val) {
foreach($val['area_name'] as $v) {
$sql_part .= "('$v', '{$val['district_id']}'),";
}
}
$sql_part = rtrim($sql_part, ',');
// print_arr($sql_part);
$sql = "INSERT INTO `geo_area` (area_name, district_id) VALUES $sql_part";
$affectedRowsNumber = $sth->exec($sql);
echo "В таблицу geo_district добавлено строк: $affectedRowsNumber";
}
catch (PDOException $e) {
echo "Database error: " . $e->getMessage();
}