PHP在多行数组中查找数组索引值



我在现有代码(由前团队成员编写(中有一个多行数组值设置,如下所示:

$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并检查为:

  1. 您可以将逗号分隔的字符串转换为数组,并使用in_aray进行检查
  2. 如果找到该值,则可以填充新的输出数组

参见以下示例

$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
)

最新更新