2012-06-13 88 views
-4

我有類似這樣的數組:檢查In_Array(遞歸關聯數組)

array(2) { 
    [0]=> 
    array(2) { 
    ["code"]=> 
    string(2) "en" 
    ["name"]=> 
    string(7) "English" 
    } 
    [1]=> 
    array(2) { 
    ["code"]=> 
    string(2) "bg" 
    ["name"]=> 
    string(9) "Bulgarian" 
    } 
} 

如何檢查字符串保加利亞是上述陣列的一部分,或者如果郎碼恩'是數組的一部分?如果我不必使用foreach來遍歷整個數組,並將字符串與每個元素['code']或元素['name']進行比較,那就太好了。

+3

你有什麼試過,你有沒有試過任何代碼?如果是這樣,請將它發佈在你的問題中,這樣你可以得到幫助。 – Haroon

+3

以某種形式或其他形式,你總是需要一個循環。即使'in_array'內部循環。 – deceze

+3

_「如果我不必使用foreach循環遍歷整個數組,並將字符串與每個元素進行比較,那就太好了」_--然後,如何找到您要查找的內容? – CodeCaster

回答

4
// $type could be code or name 
function check_in_array($arr, $value, $type = "code") { 
    return count(array_filter($arr, function($var) use ($type, $value) { 
    return $var[$type] === $value; 
    })) !== 0; 
} 
+0

這段代碼看起來就像在所有地方拋出未定義的變量警告。我想知道TS是如何得到這個工作的。如果發現你也應該儘早退出。沒有必要計數高於一個。 – hakre

+0

@hakre是的,就是這樣。 – xdazz

+0

另一個變種失蹤了,仍然想知道早退,我會說'foreach'在這裏並不糟糕。 – hakre

0

您可以使用此功能遞歸搜索

function in_arrayr($needle, $haystack) { 
     foreach ($haystack as $v) { 
       if ($needle == $v) return true; 
       elseif (is_array($v)) return in_array($needle, $v); 
     } 
     return false; 
} 

或者您可以在陣列上使用json_encode和搜索字符串:)

1

的occurence我知道我的代碼中使用的foreach,但它是容易理解和使用。

$language=array(); 
$language[0]['code']='en'; 
$language[0]['name']='English'; 
$language[1]['code']='bg'; 
$language[1]['name']='Bulgaria'; 

var_dump(my_in_array('Bulgaria', $language)); 

function my_in_array($search, $array) { 
    $in_keys = array(); 
    foreach($array as $key => $value){ 
     if(in_array($search, $value)){ 
      $in_keys[]=$key; 
     } 
    } 
    if(count($in_keys) > 0){ 
     return $in_keys; 
    }else{ 
     return false; 
    } 
} 
0

我也有類似的問題,所以我做了這個功能,它像in_array,但它可以在陣列陣列中進行遞歸搜索。我認爲這是正確的,但我沒有在很多案例中進行測試。 (對不起我的英文,我是法國人)

function in_arrayr($needle, $haystack) { 
if(is_array($haystack)){ 
    foreach($haystack as $elem){ 
     $a = in_arrayr($needle,$elem)||$a; 
    } 
} 
else{ 
    $a = (($needle == $haystack)? true: false); 
} 
    return $a; 
}