在数组中查找键并返回同一数组中的值

时间:2016-01-12 18:25:34

标签: php arrays find key

我有一个数组:

"city": [
{
 "kind": "qpxexpress#cityData",
 "code": "CHI",
 "name": "Chicago"
},
{
 "kind": "qpxexpress#cityData",
 "code": "LAX",
 "name": "Los Angeles"
},
{
 "kind": "qpxexpress#cityData",
 "code": "YMQ",
 "name": "Montreal"
},
{
 "kind": "qpxexpress#cityData",
 "code": "YOW",
 "name": "Ottawa"
},
{
 "kind": "qpxexpress#cityData",
 "code": "YVR",
 "name": "Vancouver"
}

它的完整路径是:array-> trips-> data-> city 我想要做的是从数组中获取“名称”,如果“代码”与提供的代码匹配:

function getCity($string, $array) {
    foreach ($array as $place) {
        if (strstr($string, $place)) { // mine version
            echo "Match found"; 
            return true;
        }
    }
    echo "Not found!";
    return false;
}

这就是我所得到的。我不知道如何继续。

1 个答案:

答案 0 :(得分:1)

"数组"你拥有的确是一个数组,但在JSON,而不是PHP-Array。因此,您必须先解码它:

$json = '[
    {
     "kind": "qpxexpress#cityData",
     "code": "YOW",
     "name": "Ottawa"
    },
    {
     "kind": "qpxexpress#cityData",
     "code": "YVR",
     "name": "Vancouver"
    }
]';

$array = json_decode($json, true);

请注意,代码中的"city":前缀可能是该JSON内部周围对象的剩余部分(我还删除了一些条目,因为并非所有条目都要求我这样做) 。因此,为了仅解码数组,必须将其删除。

然后你可以像现在一样迭代数组:

function getNameByCodeFromArray($array, $code) {
    foreach ($array as $entry) {
        if ($entry['code'] == $code) {
            return $entry['name'];
        }
    }
}

只需调用函数:

echo getNameByCodeFromArray($array, 'YVR'); // Echoes "Vancouver"