2014-03-04 97 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