У меня есть следующий URL: myexample.com/?город = Майами
и большой массив (23k)
$e = $_GET["city"];$myArray = array
(
array ("Miami","Florida"),
array ("Key West","Florida"),
array ("NOLA", "Luisiana"),
array ("Baton Rouge","Luisiana")
);
Я ищу решение для динамического создания нового массива городов, который соответствует состоянию города в URL-адресе, и отображает все города из этого штата.
Другими словами:
если myexample.com/?city=NOLA, я хотел бы повторить «Батон-Руж» и «NOLA» (из Луизианы)
if myexample.com/?city=Miami, эхо «Ки-Уэст» и «Майами» (из Флориды)
и т.п.
На довольно много похожих вопросов уже отвечали (Вот, Вот, но зацикливание не является одной из сильных сторон (новичок).
Спасибо.
EDIT1:
$resArray = array();
foreach($myArray as $arr) {
if(in_array($e, $arr))
$resArray[] = $arr;
}
print_r($resArray);
Результат: Массив ([0] => Массив ([0] => Майами [1] => Флорида))
Прежде всего, я бы перестроил вашу myArray
в чем-то вроде следующего:
$stateAndCities = [
"Florida" => ["Miami","Key West"],
"Luisiana" => ["NOLA", "Baton Rouge"]
];
после этого вы можете лучше обрабатывать ввод и давать более легкий вывод
$city = $_GET["city"];
$resultCities = [];
$resultState = "";
// Loop over all states with their cities
foreach($stateAndCities as $state => $cities) {
if(in_array($city, $cities)){ // if the given $city is in the $cities?
$resultCities = $cities;
$resultState = $state;
break;
}
}
if(!empty($resultState) && !empty($resultCities)){ // ensure that the city was found in any state
echo $resultState;
print_r($resultCities);
}
(код не проверен!)
Руководство:
Других решений пока нет …