搜索嵌套数组并从匹配值返回键

时间:2015-05-14 07:18:47

标签: php arrays multidimensional-array

[
    [mile] => [
            [acronym] => mi
    ],
    [kilometer] => [
            [acronym] => km
    ]
]

$acronym = 'km';

如何从匹配的acronym值返回密钥名称?在此示例中,我想返回kilometer

3 个答案:

答案 0 :(得分:1)

这应该适合你:

在这里,我只需创建一个包含array_combine()的数组,其中array_column()使用键名acronym作为键,$arr作为<?php $acronym = "km"; $arr = array_combine(array_column($arr, "acronym"), array_keys($arr)); echo $arr[$acronym]; ?> 作为键值。

kilometer

输出:

document.body.clientHeight;

答案 1 :(得分:0)

您可以执行类似

的操作
$array = array(
    'mile'=>array('acronym'=>'mi'),
    'kilometer'=>array('acronym'=>'km')
    );

$acronym = 'km';

function get($each,$acronym)
{

    foreach($each as $k => $v)
    {
        if($v['acronym'] == $acronym)
        {
            return $k;
        }
    }
}

get($array,$acronym);

答案 2 :(得分:0)

如果你的数组可以有多个级别,你可以使用stack,并通过数组递归枚举,当你遇到acronym键时,你在堆栈中有完整的键路径。像这样:

function findAcronym($array, $keyStack, &$result) {
    foreach($array as $key => $value) {
        if($key === 'acronym') {
            $result[] = $keyStack;
        } elseif(is_array($value)) {
            $keyStack[] = $key;
            findAcronym($value, $keyStack, $result)
        }
    }
}

你可以使用这样的功能:

$matches =[];
findAcronym($myArray, [], $matches);

$matches将是一个键数组数组,每个键对应于一个键路径,可以将您带到acronym

由于函数是递归的,它可以像数组的多个级别一样深。