У меня есть настройка значения многострочного массива в существующем коде (написанном бывшим членом команды) следующим образом:
$array1['Alpha']="New York,Los Angeles,Washington";
$array1['Beta']="New York,Los Angeles,Honolulu";
$array1['Gamma']="New York,Los Angeles,Washington";
....
....
and so on....
Мне нужно, чтобы у меня было значение города (скажем, «Вашингтон»), и мне нужно получить все значения индекса массива, которые имеют Вашингтон в своем списке CSV. Таким образом, в приведенном выше случае ответ будет «Альфа» и «Гамма» (но не «Бета», поскольку он не содержит Вашингтона).
Я попробовал функцию array_search, например
echo array_search("Washington",$array1);
Но это не дает желаемого результата.
Что мне здесь не хватает, пожалуйста?
Также пробовал
$cittskarray = explode(',', $array1["Washington"]);
foreach ($array1 as $cityvalue)
{
;//search one by one
}
Но это длительный метод и глубокий поиск.
3 ответа
Вы можете использовать foreach
и проверить как:
- Вы можете преобразовать строку, разделенную запятыми, в массив и проверить, используя
in_aray
- если это значение найдено, вы можете заполнить новый выходной массив.
См. Ниже пример
$array1['Alpha']="New York,Los Angeles,Washington";
$array1['Beta']="New York,Los Angeles,Honolulu";
$array1['Gamma']="New York,Los Angeles,Washington";
$returnData = [];
foreach ($array1 as $k => $val)
{
$datas = explode(",",$val);
if(in_array('Washington', $datas) ){
$returnData[] = $k;
}
}
print_r($returnData);
Вывод будет: [0] => Alpha [1] => Gamma
Я не знаю, самый ли это эффективный способ, но вы можете использовать array_filter()
(doc), чтобы добиться этого.
Пример :
<?php
$array['Alpha']="New York,Los Angeles,Washington";
$array['Beta']="New York,Los Angeles,Honolulu";
$array['Gamma']="New York,Los Angeles,Washington";
$search = "Washington";
$result = array_keys(array_filter($array, function($a) use ($search) {
return strpos($a, $search) > -1;
}));
print_r($result);
Если функция является анонимной функцией (поэтому ее можно изменить), отобразится:
Array
(
[0] => Alpha
[1] => Gamma
)
Это потому, что array_search
ищет полное совпадение.
Просто зациклите массив и проверьте наличие строки поиска:
$array1['Alpha']="New York,Los Angeles,Washington";
$array1['Beta']="New York,Los Angeles,Honolulu";
$array1['Gamma']="New York,Los Angeles,Washington";
$keyword = 'Washington';
foreach ($array1 as $key => $cities)
{
if (str_contains($cities, $keyword)) {
echo $key . "\n";
}
}
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.
Washington