Поиск в трехмерном массиве
имею массив (на деле там 50-60 нас.пунктов):
$city_info = array(
"Зарубинск" => array(
'tel_code' => '4951',
'coordinat' => '36.4554;17.5644'
),
"Убивайлово"=> array(
'tel_code' => '4952',
'coordinat' => '174.4554;86.5644'
),
"Малые Трупняки"=> array(
'tel_code' => '4953',
'coordinat' => '56.4554;36.5644'
)
);
С двумерным всё ясно и просто ыбло. Но как вот с таким работать?
По клику приходит у меня код города
По итогу я должен словить от кода - название нас.пункта и его координаты.
Получается в теории делать по каждой строке поиск?
1. Зашёл в мини-массив (двумерный), поискал - не нашёл = вышел?
2. Зашёл в следующий. Поискал - нашёл = прервать пиоск?
------
Не могу что-то примера аналогичного найти.
к примеру так
array_filter($city_info, fn($info, $city) => $info['tel_code'] == $search, ARRAY_FILTER_USE_BOTH);
но если у вас всегда поиск происходит по коду города - то его и вынесите в ключи, потом просто return $city_info[$search]
ну так если на входе код города, то пусть он и будет индексом верхнего уровня. во-первых поиск быстрее, во-вторых названия населенных пунктов может совпадать, а вот код - нет. изначально плохо разработанная структура хранения информации может родить гемор на года.
<?php
$city_info = array(
"Зарубинск" => array(
'tel_code' => '4951',
'coordinat' => '36.4554;17.5644'
),
"Убивайлово"=> array(
'tel_code' => '4952',
'coordinat' => '174.4554;86.5644'
),
"Малые Трупняки"=> array(
'tel_code' => '4953',
'coordinat' => '56.4554;36.5644'
)
);
function searchByCode($code, $data) {
$index = array_search($code, array_column($data, 'tel_code'));
$key = array_keys($data)[$index];
return $data[$key];
}
$result = searchByCode(4953, $city_info);
echo var_dump($result);
print_r($result, false);
ну или так
а по хорошему ключами в массиве должны быть коды...
Где твой алгоритм.. что ты ищешь-то
<?php
$city_info = array(
"Зарубинск" => array(
'tel_code' => '4951',
'coordinat' => '36.4554;17.5644'
),
"Убивайлово"=> array(
'tel_code' => '4952',
'coordinat' => '174.4554;86.5644'
),
"Малые Трупняки"=> array(
'tel_code' => '4953',
'coordinat' => '56.4554;36.5644'
)
);
function findCityByCode($code) {
global $city_info;
foreach ($city_info as $city => $data) {
if ($data['tel_code'] == $code) {
return array(
'city' => $city,
'coordinates' => $data['coordinat']
);
}
}
return null; // Если город не найден
}
// Пример использования
$tel_code_to_find = '4952';
$result = findCityByCode($tel_code_to_find);
if ($result) {
echo "Город: " . $result['city'] . "
";
echo "Координаты: " . $result['coordinates'] . "
";
} else {
echo "Город не найден.";
}
?>