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