2011-12-08 5 views
2

私は値として配列にルックアップし、そのキーを取得したいC$_GET変数から渡された値を、持っています。正確なキーを返すために配列を検索するにはどうすればよいですか?検索値によってアレイと戻るキー

<?php 

$array1 = array(0 => 'a', 1 => 'c', 2 => 'c'); 
$array2 = array(0 => '3', 1 => '2', 2 => '3'); 

$key1 = array_search('c', $array1); 
$key2 = array_search('3', $array2); 

?> 

戻り

$key1 = 1; 
$key2 = 0; 

以下のコード私は

$key1 = 2; 
$key2 = 2; 
+1

をどのように機能するかを見てのために一緒に簡潔にそれを維持したいとあなたは探していたその価値を持つ*最後の*鍵を見つけたいというあなたの基準はありますか?あなたはこれで何をしたいのですか? – deceze

+0

それはどういう意味ですか? – alex

+0

私はこれらのキーを$ array1と$ array2から一緒に一致させたいので、両方の配列がSQLプロセスを実行するようにリンクされているためです。値渡しが 'c'と '3'の場合は一致する必要があります。両方の戻り値のキーは$ key1 = 2と$ key2 = 2でなければなりません。 – conmen

答えて

4
foreach ($array1 as $key => $value) { 
    if ($value == 'c' && $array2[$key] == '3') { 
     echo "The key you are looking for is $key"; 
     break; 
    } 
} 

私はあなたががやろうとしているものは何でもする正気の方法がありますかなり確信しています。おそらく、

+0

ええ!それは私が欲しいものです。本当にありがとうございます! – conmen

3

を期待していても機能は、それが持っている必要があります正確に戻りました。値 'c'の最初の出現は$ array1のインデックス1に存在し、値 '3'は$ array2のインデックス0に最初に出現します

この動作はthe php docs on array_searchに記載されています。

針がhaystackに複数回見つかった場合は、最初に一致するキー が返されます。一致するすべての値のキーを返すには、代わりにオプションのsearch_valueパラメータを使用して array_keys()を使用してください。

0

この値を持つ最後のキーを検索する場合は、最初に配列を逆にすることができます。

$array1 = array(0 => 'a', 1 => 'c', 2 => 'c'); 
$array2 = array(0 => '3', 1 => '2', 2 => '3'); 

$key1 = array_search('c', $array1); 
$key2 = array_search('3', $array2); 

var_dump($key1,$key2); //output: int(1) int(0) 


$key1 = array_search('c', array_reverse($array1, true)); 
$key2 = array_search('3', array_reverse($array2, true)); 

var_dump($key1,$key2); //output: int(2) int(2) 
+0

最後のキーを見つけられませんが、キーが最初に一致するため、これらのキーが正しく返された場合、値は 'c'と '2'になります。 – conmen

0

のようなもの:

<?php 
// for specificly 2 arrays 
function search_matching($match1, $match2, array $array1, array $array2) { 
    foreach($array1 as $key1 => $value1) { 
     // we may want to add $strict = false argument to distinguish between == and === match 
     // see http://php.net/manual/en/function.array-search.php 
     if($value1 == $match1 and isset($array2[$key1]) and $array2[$key1] == $match2) { 
      return $key1; 
     } 
    } 

    return null; 
} 


// unlimited 
function search_matching(array($matches), array $array/*, ...*/) { 
    if(count($matches) != func_num_args() - 1) 
     throw new \Exception("Number of values to match must be the same as the number of supplied arrays"); 

    $arrays = func_get_args(); 
    array_shift($arrays); // remove $matches 
    $array = array_unshift($arrays); // array to be iterated 

    foreach($array as $key => $value) { 
     if($value == $matches[0]) { 
       $matches = true; 

       foreach($arrays as $keyA => $valueA) { 
        if(! isset($arrays[$key] or $valueA != $matches[$keyA+1]) { 
         $matches = false; 
         break; 
        }     
       } 

       if($matches) 
        return $key; 
     } 
    } 

    return null; 
} 

機能を念頭に置いて、数字キーを使用して作成されます。

彼らは他の機能に一部の機能をオフロードすることによりクリーナー作ることができるが、これらのキーが値を持っているので、私は簡単にそれはそれは正確な結果である

関連する問題