我在现有代码(由前团队成员编写(中有一个多行数组值设置,如下所示:
$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
}
但这是一种冗长的方法,需要深入研究。
您可以使用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_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";
}
}
示例
我不知道这是否是最有效的方法,但您可以使用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
)