2012-04-16 7 views
0

2次元配列値を1列検索し、見つかったときにそのキーを返すコードを記述しようとしています。今私は、値を見つけて真か偽かを返す関数と、キーを返す別の(機能しない)関数の2つの関数を持っています。私は発見関数の再帰的な性質を保持するが、キーを返すという意味で2つをマージしたいと思う。私は両方の機能を1つの機能で行う方法を考えることはできませんが、作業中のキーファインダーは大変感謝しています。PHP検索多次元配列 - 非関連

おかげ

function in_array_r($needle, $haystack, $strict = true) { 
foreach ($haystack as $item) { 
    if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) { 
     return true; 
    } 
} 

return false; 

}

function loopAndFind($array, $index, $search){ 
    $returnArray = array(); 
    foreach($array as $k=>$v){ 
      if($v[$index] == $search){ 
       $returnArray[] = $k; 
      } 
    } 
    return $returnArray; 

} `

は申し訳ありませんが、私は例を追加するためのもの。たとえば、

Array [0]{ 
[0]=hello 
[1]=6 
} 
[1] 
{ 
[0]=world 
[1]=4 
} 

と[x] [0]インデックスで配列を検索して、検索語句の各文字列を確認したいとします。見つかった場合は、 "world"のようにメイン配列のインデックス/キーを返す必要があります。1

+0

は、あなたがそれ内で一致したいものをハイライト表示の例アレーを投稿してもらえますか? "2次元配列値の1つの列とキーを返す"はあまり明確ではありません。 – Ing

+0

なぜ2番目の関数でインデックスを使用していますか? – WordsWorth

+0

私は上記の例を掲載しましたが、私はなぜインデックスを使用しているのかわかりません。私はArray [0] {[index] = stuff、[1] = words}などのように2番目の配列のインデックスであると考えていたと思います –

答えて

2

これは動作します:

$array = array(array('hello', 6), array('world', 4)); 
$searchTerm = 'world'; 

foreach ($array as $childKey => $childArray) { 
    if ($childArray['0'] == $searchTerm) { 
     echo $childKey; //Your Result 
    } 
} 
+0

ありがとう、素晴らしい作品! –

1

あなたの最初の機能で必要なものはすでに用意されています。 PHPは休息ん:

$findings = array_map('in_array_r', $haystack); 
$findings = array_filter($findings); # remove all not found 
var_dump(array_keys($findings)); # the keys you look for 
+0

申し訳ありませんが、私はあなたが何をしようとしているのか分かりません。一度にすべての関数を実行するのではなく、配列を一度に1つずつ検索する必要があります。それは意味をなさないか、あなたのコードを誤解しましたか?ありがとうございました –

+0

あなたが検索したいものや方法をあなたの質問から本当に明らかではありませんでした。あなたは、どのようにコードを呼び出すか、入力が何であるか、そして出力がどのようなものであるべきかを示すw/oでいくつかの関数を削除しました。あなたがそれを追加すると、私は答えを同じように明確にすることができると確信しています。 – hakre

+0

助けていただきありがとうございますが、他の回答はうまくいきます。 –