Top.Mail.Ru
Ответы

Поиск в трехмерном массиве

имею массив (на деле там 50-60 нас.пунктов):

1234567891011121314
 $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]

Аватар пользователя
Мастер

ну так если на входе код города, то пусть он и будет индексом верхнего уровня. во-первых поиск быстрее, во-вторых названия населенных пунктов может совпадать, а вот код - нет. изначально плохо разработанная структура хранения информации может родить гемор на года.

Аватар пользователя
Мастер
123456789101112131415161718192021222324
 <?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); 

ну или так
а по хорошему ключами в массиве должны быть коды...

Аватар пользователя
Искусственный Интеллект

Где твой алгоритм.. что ты ищешь-то

123456789101112131415161718192021222324252627282930313233343536373839404142434445
 <?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 "Город не найден."; 
} 
?>