2017-06-02 3 views
0

私は複数のキーと1つのキーが存在するが、どちらが存在するのかわからない配列を持っています。配列の複数のキーを検索し、最初に見つかった値を返す方法は?

私の問題は、私は、配列内に存在し、そのキーの値を取得する必要がありますが、私は、個々のキーにloopまたはissetを使用したくないですが、私は知りたい任意の組み込みPHP関数があり、それを通して存在である私このソリューションを実現できますか?ここで

$keys = array("key1","key2","key3"); 
$data= array("mykey"=>"myval","mykey2"=>"myval2","key2"=>"key2val"); 

$val = isset($data["key1"])?1:(isset($data["key2"])?2:(isset($data["key3"])?3:0));//i dont want to use this or any loop 
+1

を? –

+1

私はそのような関数は存在しないとは思いますが、なぜキーが存在するかどうかを確認するためにループとissetを使いたくないのですか? – Sander

+0

将来私のキー配列が増えるので、できるだけコードを最短にしたいので、私はループを使いたくないので、私はissetを使いたくありません。 –

答えて

1

はあなたのソリューションです:

$keys = array("key1","key2","key3"); 
$data= array("mykey"=>"myval","mykey2"=>"myval2","key2"=>"key2val"); 

print_r (current(array_intersect_key($data, array_flip($keys)))); 

私はここに1つのライナーだあなたはそれがよりよい解決策になるため

$keys = array("key1","key2","key3"); 
$data= array("mykey"=>"myval","mykey2"=>"myval2","key2"=>"key2val"); 

foreach($data as $key=>$value) 
{ 
    if(in_array($key,$keys)) 
    { 
    // your logic 
    } 
} 
+0

出力を取得するには、現在の()関数を最初のソリューション –

1

として、ループを使用する必要があると思います。しかし、あなたはそれを1ヶ月後に説明できますか?

$keys = array("key1","key2","key3"); 
$data = array("mykey"=>"myval","mykey2"=>"myval2","key2"=>"key2val"); 

print_r(array_intersect($keys, array_keys($data))); 

// Output: 
Array 
(
    [1] => key2 
) 
+0

出力を取得するには私はあなたのソリューションでcurrent()関数を使用する必要がありました –

2

その交差点ください:あなたはループをしたくないのはなぜ

// Flip is needed for [key1 => 0, ...] representation 
$list = array_intersect_key(array_flip($keys), $data); 
// Check existence 
if ($list) { 
    // You need the value, started from 1 (instead of zero) 
    $val = 1 + current($list); 
} else { 
    $val = 0; 
} 
+0

結果の中に1を加えることを理解できませんでした –

+0

'isset($ data [" key1 "])?1:' - key1 'は値「0」を有する – FieryCat

関連する問題