• ベストアンサー

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を返すようにしたいのですが、わかりません。 どのようにプログラムを書けばよいのでしょうか? よろしくお願いします。

  • PHP
  • 回答数4
  • ありがとう数5

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

  • ベストアンサー
  • lin_pon
  • ベストアンサー率42% (3/7)
回答No.3

ご参考まで。 <?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>'; } } ?>

e_honda
質問者

お礼

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

その他の回答 (3)

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

仕様を再考した方がいいですね 今回のケースですと$a[2]と$b[3]もマッチします。 戻り値を返す時に複数あるときに何を優先順位として返すのかを定義する必要があります。 また、場合によっては$b[4]=bだったりしたとき同じ値がでます。 もしきちんとしたデータアクセスをしたいなら配列上の値はかならずユニークである などの仕様定義が必要になります。

e_honda
質問者

お礼

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

回答No.2

$i = 0; foreach($b as $dat) { if ($dat === $a[1]) { break; } $i++; } print "a[1]と同じb[i]の添え字i = ".Strval($i);

e_honda
質問者

お礼

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

  • duron
  • ベストアンサー率77% (73/94)
回答No.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"); } } } ?>

e_honda
質問者

お礼

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

関連するQ&A

  • phpでオブジェクト化に挑戦中です。配列がうまく扱えません。

    このようなサンプルプログラムを作ってみました どうやら配列がまずいようなのですが、どうすればよいでしょうか。 <?php class TEST2{ var $b1; } class TEST{ var $a1=TEST2; function printout(){ $this->$a1[0]->b1='123 '; $this->$a1[1]->b1='abc '; $this->$a1[2]->b1='DEF '; } } $c = new TEST; $c->printout(); echo $c->$a1[0]->b1; echo $c->$a1[1]->b1; echo $c->$a1[2]->b1; ?> ちなみに出力結果は DEF DEF DEF となりました。 疑問1.なぜ全部同じ結果になるのか 疑問2.配列だと echo $c->$a1[2]->b1; のように、$a1と、$マークがないと動かない。$を取ると強制終了される。 お願いします。へんてこな質問ですみません。

    • 締切済み
    • PHP
  • PHPからFlashへの配列の渡し方がわかりません

    こんにちは。 FlashとPHPの連係についての質問です。 どうしてもわからないのでどなたか手を貸してくださると助かります。 PHP側から$a=array("a","b","c")、という配列をFlash側に送ります。 その際、まずHTMLタグの<object>内にはどのように記述すればよろしいのでしょうか? またFlash側でその配列をどのように受け取り、その値を配列に入れたいのですがどのようにしたらよろしいでしょうか?? どなたかお願いいたします。

    • ベストアンサー
    • Flash
  • PHPで配列の最も小さいもの3つを取り出す方法

    PHPで配列のソートが出来ずに困っています 今 $a[2]=10 $a[10]=2 $a[3]=30 $a[22]=20 $a[9]=4 $a[53]=29 ・ ・ ・ のような配列があり、これを配列の値の小さいものから順に3つ取り出したいのですが、どの様にしたらよいでしょうか? 具体的には $a[10],$a[9],$a[2] という形で取り出したいです 最終的にはそれぞれの添え字を他の変数に代入した形にしたいです $b[1] = '10'; $b[2] = '9'; $b[3] = '2'; みたいなかんじです どなたかご解答いただければと思います どうぞよろしくお願いいたします

    • ベストアンサー
    • PHP
  • PHPからFlashへの配列の渡し方がわかりません

    こんにちは。 FlashとPHPの連係についての質問です。 どうしてもわからないのでどなたか手を貸してくださると助かります。 PHP側から$a=array("a","b","c")、という配列をFlash側に送ります。 その際、まずHTMLタグの<object>内にはどのように記述すればよろしいのでしょうか? またFlash側でその配列をどのように受け取ればよろしいでしょうか?? どなたかお願いいたします。

    • 締切済み
    • PHP
  • PHP で Excel を2次元配列で取出したい

    PHP で Excel ファイルのデータを取り出して、単純な2次元配列にしたいのですが、なかなかうまく行かず、ここ2~3日、はまっています。サポートをお願い頂けたら幸いです。 <これまでやった事> ・ネット情報を参考に、phpspreadsheet が使える環境にし必要処理を実施後、以下のように rangeToArray 関数を使い、 print_r で中身を見ると、エクセルの A1 から N7 まで、連想配列として取り出されます。 $data = $sheet->rangeToArray("A1:N9"); print_r($data);  連想配列の型式で、   Array ( [0] => Array ( [0] => (A1 のデータ)[1] => (A2 のデータ)..... [12] => (A13のデータ)) [1] => Array ( [0] => (A2のデータ) [1] =>(B2のデータ).......   が表示されます。 しかし私には以下のような単純な2次元配の方が理解しやすいので、      $data[0][0] ならば A1 のデータ、$data[12][0] ならば A13 のデータ、     $data[2][6] ならば C7 のデータを意味し、 例えば、C1 に「コスト」   というタイトル名が表示されている場合、   $cost = $data[2][0]; で C1 の内容を $cost という変数に入れたいのですが、どうすれば良いのでしょうか? なお、現在は、$data 変数に添え字 [0][5] を入れると文法エラーでます。 ちなみに、私は連想配列の理解に追いついていけないほど、PHP の初心者です。 以上、コメントを頂けたら幸いです。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPの配列について

    PHPの配列についての質問です。 以下のソースを // == ソース == function hoge( $foo ) { $arrs['a'] = 'A'. $foo; $arrs['b'] = 'B'. $foo; $arrs['c'] = 'C'. $foo; $arrs['d'] = 'D'. $foo; } hoge( '3' ); hoge( '9' ); // == /ソース == 実行すると print_rは // == print_r == Array (   [a] => A3   [b] => B3   [c] => C3   [d] => D3 ) Array (   [a] => A9   [b] => B9   [c] => C9   [d] => D9 ) // == /print_r == のようになります。 これを 関数を実行するごとに (0から IDのような 配列を組むようにする) 以下のようにするには どのようにすればよいでしょうか? // == print_r == Array (   [0] => Array     (       [a] => A3       [b] => B3       [c] => C3       [d] => D3     )   [1] => Array     (       [a] => A9       [b] => B9       [c] => C9       [d] => D9     ) ) // == /print_r == 使用目的は get_contentsしたものを正規表現で取り出し 配列にする処理に使おうと思っています。

    • ベストアンサー
    • PHP
  • 配列の重複削除について

    配列の重複削除について教えて下さい。 普通の重複チェックとは違い、3つの配列 それぞれに値があり、添え字が0から同じ ように始まり、3つの配列が全て同じものは、 例えば、 配列A[2]='30' 配列B[2]='000' 配列C[2]='1' 配列A[4]='30' 配列B[4]='000' 配列C[4]='1' は、1つの添え字にまとめたい。 その3つが一致したもの重複をまとめたいのと、 新しく出た3つの値は残したいのです。 つまり、以下のように抽出したいのです。 何か良い方法があれば教えて下さい。 perlで作成しています。 注)配列Cは空白もあります。 配列A( 10, 20, 30, 10, 30, 20) 配列B(000,010,000,010,000,000) 配列C(  , 0, 1, 0, 1, 1) ↓ 配列D( 10, 20, 30, 10, 20) 配列E(000,010,000,010,000) 配列F(  , 0, 1, 0, 1)

    • ベストアンサー
    • Perl
  • MySQLでの配列について

    MySQLについての質問です。 配列に関してわからないことがでてきました。 PHP側からMySQLに接続しデータを配列として取得するやり方をどなたか教えてください。 MySQL側にはseatというテーブルを用意してあります。 --------------- |seat|max|flag| |-------------| |A1 | 4 | 0 | |-------------| |A2 | 4 | 0 | |-------------| |B1 | 6 | 0 | |-------------| |B2 | 6 | 0 | |-------------| |C1 | 5 | 0 | |-------------| 以上のようにそのシート名、収容最大人数をデータとして保存しております。 PHP側からアクセスしてPHP側の$number(人数)と照らし合わせ、この$numberより$maxが多い時、このテーブルからシート名だけを取り出し、その値を配列として取得したいときSQL文をどのようにかけばよろしいでしょうか? へたくそな説明だとは思いますが、どなたかお願いいたします。

  • 配列間の差異

    配列$a[]と配列$b[]があって(要素数はそれぞれ別々) $a[]と$b[]の差異を取得、もしくは同じ部分を取得したいのですが どのようにすればよろしいでしょうか?

    • ベストアンサー
    • PHP
  • PHPで配列の検索方法

    PHPで下のような2次元配列があったとします。(りんご=a、みかん=bのような意味です。CSVからデータを2次元配列に格納したものです。) $data[0][0]="りんご" , $data[0][1]="a" $data[1][0]="みかん" , $data[1][1]="b" $data[2][0]="ばなな" , $data[2][1]="c" $data[3][0]="ぶどう" , $data[3][1]="d" ここで下のような1次元配列$hogeがあったとき $hoge[0]="ばなな" , $hoge[1]="りんご" 新たに1次元配列$hogehogeを用意して、2次元配列の中から"りんご"や"ばなな"に対応する文字列を探し出して $hogehoge[0]="c" , $hogehoge[1]="a" と、格納したいのですが、やり方がわかりません。 イメージとしまして、 $hoge[0]→($data[0][0]~$data[3][0]の中から探す)→($data[2][0]であるとわかる)→($data[2][0]に対応するのは$data[2][1]だとわかる)→($hogehoge[0]=cと格納) もし分かる方がおられましたらお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう