首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索嵌套数组并从匹配值返回键

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

Stack Overflow用户
提问于 2015-05-14 07:18:47
回答 3查看 65关注 0票数 0
代码语言:javascript
复制
[
    [mile] => [
            [acronym] => mi
    ],
    [kilometer] => [
            [acronym] => km
    ]
]

$acronym = 'km';

如何从匹配的acronym值返回密钥名?在本例中,我希望返回kilometer

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-14 07:37:02

这应该适用于你:

在这里,我只需使用array_combine()创建一个数组,其中我使用array_column()和键名acronym作为键,使用来自$arrarray_keys()作为值。

代码语言:javascript
复制
<?php

    $acronym = "km";
    $arr = array_combine(array_column($arr, "acronym"), array_keys($arr));
    echo $arr[$acronym];

?>

产出:

代码语言:javascript
复制
kilometer
票数 1
EN

Stack Overflow用户

发布于 2015-05-14 07:30:13

你可以做这样的事

代码语言:javascript
复制
$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);
票数 0
EN

Stack Overflow用户

发布于 2015-05-14 07:32:17

如果数组可以有多个级别,则可以使用一个stack,然后递归地枚举数组,当遇到acronym键时,堆栈中有完整的键路径。就像这样:

代码语言:javascript
复制
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)
        }
    }
}

您可以像这样使用这个函数:

代码语言:javascript
复制
$matches =[];
findAcronym($myArray, [], $matches);

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

由于该函数是递归的,因此它可以深入到数组所具有的多个级别。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30231557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档