電子書籍の厳選無料作品が豊富!

二つの配列を比較して同じ値が入っていた場合、そのKEYを配列に入れたいと思います。
(例)$aと$bを比較して同じ値が入っているときに$aのkeyを$cに格納したい。
$a = array("","","山","","川","海","","富士山","空","","");
$b = array("川","","","","","海","","富士山","空","");

※空白は無視したい。
この場合
$c = array("4","5","7","8");
のようにしたいと思います。

どなたか教えてください。

A 回答 (2件)

全件比較なら、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);
?>
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/03/23 16:08

すでに回答が出ているようですので、不要な情報とは思いますが


処理速度を優先するなら、ループを回さずに求める方法もあります

<?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);
?>
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!