2014-03-04 65 views
1

我有一个数据结构,这样的:获得从子阵列差值子阵列中的PHP

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,然后获取与子数组键expires_in对应的值30

回答

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); 
1

如果结构不会改变,并保持这种方式,它很容易,是:

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

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

2

我想你可以在阵列回路,并使用in_array()功能找到你的匹配值

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

工作样本here

+0

添加'打破;'的'if'会避免无用的循环,因为它似乎有数组 – Kalzem

+0

耶@babyazerty你是对在同一个'course_502_access_from'没有两次 – Fabio