-3

我有一个类似的数组:

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

如何检查字符串保加利亚语是否是上述数组的一部分,或者语言代码“en”是否是数组的一部分?如果我不必使用 foreach 循环整个数组并将字符串与每个元素 ['code'] 或 element['name'] 进行比较,那就太好了。

4

4 回答 4

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;
}
于 2012-06-13T07:19:10.520 回答
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;
    }
}
于 2012-06-13T07:45:35.593 回答
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并搜索子字符串的出现:)

于 2012-06-13T07:22:31.937 回答
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;
} 
于 2013-07-25T15:32:40.620 回答