• ベストアンサー

配列を比較して同じものがあった場合にそのKEYを返す

二つの配列を比較して同じ値が入っていた場合、そのKEYを配列に入れたいと思います。 (例)$aと$bを比較して同じ値が入っているときに$aのkeyを$cに格納したい。 $a = array("","","山","","川","海","","富士山","空","",""); $b = array("川","","","","","海","","富士山","空",""); ※空白は無視したい。 この場合 $c = array("4","5","7","8"); のようにしたいと思います。 どなたか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

全件比較なら、foreachを二重で回せばよいのでは? <? $a = array("","","山","","川","海","","富士山","空","",""); $b = array("川","","","","","海","","富士山","空",""); foreach($a as $key=>$val){ foreach($b as $val2){ if($val!="" and $val===$val2) $c[]=$key; } } print_r($c); ?> ただ、空白の頻度がたかいのであれば、先に除外した方が 効率はよいでしょう。 <? $a = array("","","山","","川","海","","富士山","空","",""); $b = array("川","","","","","海","","富士山","空",""); foreach($a as $key=>$val){ if($val!=="") $aa[$key]=$val; } foreach($b as $key=>$val){ if($val!=="") $bb[$key]=$val; } foreach($aa as $key=>$val){ foreach($bb as $val2){ if($val===$val2) $cc[]=$key; } } print_r($cc); ?>

hunter_999
質問者

お礼

ありがとうございます。 希望通りのことができました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • mpx
  • ベストアンサー率71% (149/209)
回答No.2

すでに回答が出ているようですので、不要な情報とは思いますが 処理速度を優先するなら、ループを回さずに求める方法もあります <?php $a = array("","","山","","川","海","","富士山","空","",""); $b = array("川","","","","","海","","富士山","空",""); $a1=array_flip($a); $b1=array_flip($b); $c1=array_intersect_key($a1,$b1); unset($c1[""]); $c=array_values($c1); print_r($c); ?>

すると、全ての回答が全文表示されます。

関連するQ&A