Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查是否在_数组中(在递归关联数组中)_Php_Arrays_Recursion_Associative Array - Fatal编程技术网

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

Php 检查是否在_数组中(在递归关联数组中),php,arrays,recursion,associative-array,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" } } 如何检查字符串保加

我有一个类似的数组:

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

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

您可以使用此函数进行递归搜索

// $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;
}
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;
} 

或者您可以在数组上使用,并搜索子字符串:)

我知道我的代码用于每个字符串,但它很容易理解和使用

$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;
    }
}

我有一个类似的问题,所以我做了这个函数,它类似于in_数组,但它可以递归地在数组中搜索in数组。我认为这是正确的,但我没有在很多情况下测试。(对不起我的英语,我是法国人)


你试过什么,你试过代码吗?如果是这样的话,请把它贴在你的问题上,这样你就可以得到帮助。以某种形式,你总是需要一个循环。甚至在_数组中的
也会在内部循环。“如果我不必使用foreach循环整个数组并将字符串与每个元素进行比较,那就太好了”-那么您如何找到您要查找的内容呢?@deceze,true。但这并不意味着我会提倡自定义
foreach
上循环\u array()
(当然,在适用的情况下)。这段代码看起来像是到处抛出未定义的变量警告。我想知道TS是怎么做到的。如果发现,你也应该提前退出。没有必要比一个更高的计数。另一个变量丢失了,仍然在考虑提前退出,我想说,
foreach
在这里还不错。@hakre是的,
foreach
在这里更好,只是展示了它以外的方式。我的经验是,它在
PHP5.3.1
中工作,但在
5.2.17
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;
}