如何通过键查找多维数组的值

时间:2019-05-31 07:00:54

标签: php arrays performance

如何从多维数组中搜索数组键,并使用父数组键返回找到的键值(如果存在)。例如,我自定义了数组:

$array = [
    'type' => 'vacancy',
    'needs' => ['root' => 'active'],
    'market' => 'shopping',
    'red' => 'color', 
    'education' => 'learning',
    'fruits' => [
        'red' => 'apple',
        'cool' => 'cherry'
    ]
];

例如,我需要当前数组中的搜索键red。如您所见,此数组中存在2个项,其键为red。如果数组具有相似的键,则函数返回示例数组作为响应:

[
    0 => ['red' => 'color'],
    1 => ['red' => 'apple']
]

如果搜索键(例如type)在数组内仅一次,则响应将如下所示:

['type' => 'vacancy']

我很累:

function searchKey($key, $array) {
    foreach ($array as $k => $v) {
        if($key === $k) {
            return [$k => $v];
        } elseif(is_array($v)) {
            return searchKey($key, $v);
        } elseif(is_array($k)) {
            return searchKey($key, $k);
        }
    }
    return false;
}

当我从数组结果中搜索键root时是正确的,但是当我搜索键red时返回false

如何解决我的功能或有什么性能方法可以搜索钥匙并获得结果?

1 个答案:

答案 0 :(得分:2)

您可以尝试以下方法:

function findByKey($findKey, $array, $result = []) {
    foreach ($array as $key => $value) {
        if ($key === $findKey) {
            $result[] = [$key => $value];
        }
        if (is_array($value)) {
            $result = findByKey($findKey, $value, $result);
        }
    }
    return $result;
}

想法是使用递归函数:

  1. 您遍历数组
  2. 对于每个key => value,您检查密钥是否是您想要的:如果是,则将其添加到结果数组中,否则继续
  3. 如果该值是另一个数组,则在具有所需键的情况下在该数组内搜索

现在使用它:

$array = [
    'type' => 'vacancy',
    'needs' => ['root' => 'active'],
    'market' => 'shopping',
    'red' => 'color', 
    'education' => 'learning',
    'fruits' => [
        'red' => 'apple',
        'cool' => 'cherry'
   ]
];

使用键type

$result = findByKey('type', $array);

var_dump($result);

输出为:

array(1) {
[0]=>
    array(1) {
    ["type"]=>
        string(7) "vacancy"
    }
}

使用键red

$result = findByKey('red', $array);

var_dump($result);

输出为:

array(2) {
    [0]=>
    array(1) {
        ["red"]=>
        string(5) "color"
    }
    [1]=>
    array(1) {
        ["red"]=>
        string(5) "apple"
    }
}

这里是测试链接:link