こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHPの配列でわからないことがあるので教えてください。

PHPの配列でわからないことがあるので教えてください。

例えば以下のような2つの配列$aと$bがあるとします。
$a[0]=a、$a[1]=b、$a[2]=c
$b[0]=w、$b[1]=q、$b[2]=b、$b[3]=c

これで、$a[1]と$b[2]の中身が同じであることを取得し、さらに$bの配列の添え字の2を返すようにしたいのですが、わかりません。
どのようにプログラムを書けばよいのでしょうか?
よろしくお願いします。

投稿日時 - 2010-09-29 17:18:52

QNo.6216317

すぐに回答ほしいです

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

ご参考まで。

<?php
$a = array('a', 'b', 'c');
$b = array('w', 'q', 'b', 'c');

for ($i=0; $i < count($a); $i++) {
//$aの値は、$bに存在するかどうかチェックする(in_array)。存在しているTrue
if (in_array($a[$i], $b)) {
echo $a[$i].'は $b にも存在している。<br>';
$key = array_search($a[$i], $b);
echo $key.'は、$aと重複した値の要素です。<br>';
}
}
?>

投稿日時 - 2010-09-29 17:40:08

お礼

ありがとうございました。

投稿日時 - 2010-09-29 18:08:20

ANo.3

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

仕様を再考した方がいいですね

今回のケースですと$a[2]と$b[3]もマッチします。
戻り値を返す時に複数あるときに何を優先順位として返すのかを定義する必要があります。

また、場合によっては$b[4]=bだったりしたとき同じ値がでます。
もしきちんとしたデータアクセスをしたいなら配列上の値はかならずユニークである
などの仕様定義が必要になります。

投稿日時 - 2010-09-29 17:56:15

お礼

ありがとうございました。

投稿日時 - 2010-09-29 18:08:33

ANo.2

$i = 0;
foreach($b as $dat) {
if ($dat === $a[1]) {
break;
}
$i++;
}

print "a[1]と同じb[i]の添え字i = ".Strval($i);

投稿日時 - 2010-09-29 17:37:39

お礼

ありがとうございました。

投稿日時 - 2010-09-29 18:08:46

ANo.1

ベタにforeachで回してみました。

<?php
$a=array("a","b","c");
$b=array("w","q","b","c");

foreach($a as $value) {
foreach($b as $key => $value2) {
if($value==$value2) {
print("same value:".$value." key:".$key."<br>\n");
}
}
}
?>

投稿日時 - 2010-09-29 17:31:19

お礼

ありがとうございました。

投稿日時 - 2010-09-29 18:08:59

あなたにオススメの質問