检查是否In_Array(在递归关联数组中)

时间:2012-06-13 07:12:34

标签: php arrays recursion associative-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"
  }
}

如何检查字符串Bulgarian是否是上述数组的一部分,或者如果lang代码'en'是数组的一部分?如果我不必使用foreach遍历整个数组并将字符串与每个元素['code']或元素['name']进行比较,那就太棒了。

4 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

我知道我的代码使用了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;
    }
}

答案 2 :(得分: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并搜索子字符串的出现:)

答案 3 :(得分: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;
}