从PHP中的子数组值获取子数组

时间:2014-03-04 14:17:47

标签: php arrays

我有一个类似的数据结构:

Array(
    [494] => Array(
        [meta_key] => course_494_access_from
        [expires_in] => 95
    ),
    [498] => Array(
        [meta_key] => course_498_access_from
        [expires_in] => 122
    ),
    [502] => Array(
        [meta_key] => course_502_access_from
        [expires_in] => 30
    ),
    [506] => Array(
        [meta_key] => course_506_access_from
        [expires_in] => 365
    )
)

我想问一下,如果有办法通过搜索course_502_access_from来获取expires_in值

因此,在示例中,我想知道是否有一种方法可以在给定结构中执行数组搜索,方法是使用术语course_502_access_from,然后获取与sub对应的值30数组键expires_in

3 个答案:

答案 0 :(得分:2)

我认为您可以在数组中循环并使用in_array()函数来查找匹配值

foreach($array as $key => $data)
{
    if(in_array("course_502_access_from",$data))
    {
        echo $array[$key]['expires_in'];
        break;
    }
}

工作样本here

答案 1 :(得分:2)

一般情况下,当多次出现搜索字符串('course_502_access_from')时,您可以将array_filterarray_map一起使用。 不知怎的,这样:

$result = array_map(
    function ($v) {
        return $v['expires_in'];
    },
    array_filter($array, function ($v) {
        return $v['meta_key'] == 'course_502_access_from';
    }
);

print_r($result);

答案 2 :(得分:1)

如果结构永远不会改变并保持这种状态,那么很简单,是的:

foreach($your_array as $a) {
    if($a["meta_key"] === "course_502_access_from") {
        return $a["expires_in"];
    }
}

如果确实如此,你会得到多层......好吧,事情开始变得复杂起来。你可以创建一个函数并使用递归...但这需要的不仅仅是这5行代码。