-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 を使用して配列全体をループ処理し、文字列を各要素 ['コード'] または要素 ['名前'] と比較する必要がなかったら素晴らしいことです。

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 に答える