• ベストアンサー

Arrayを並びかえる!?

お世話になります。 $w をprint_rすると Array ( [0] => Array ( [email] => gmail.com ) [1] => Array ( [email] => yahoo.co.jp ) [2] => Array ( [email] => hotmail.com ) ) になり、$aは Array([0]=>yahoo.co.jp, [1]=>gmail.com, [2]=>infoseek.com) になります。 $wと$aをarray_diffをしようし、お互いに重複している値を消去し、消去するにはどうすればいいのでしょうか?

  • PHP
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.3

$w2 = array(); for($i=0;$i<count($w);$i++){ $w2[] = $w[$i]['email']; } とすると$wを1次元にした配列$w2ができます。 $w2と$aでarray_diffを使用すればいいのではないでしょうか。

Intel_404
質問者

お礼

回答していただいた方へ ご回答していただきありがとうございました。なんとか解決できました。ありがとうございました。

その他の回答 (2)

  • mi8ko
  • ベストアンサー率0% (0/2)
回答No.2

配列の重複なら下記のやり方では? $a_2 array_unique ($a);

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

総当りチェックをして引っかかったら削除する。 それぞれの配列内に重複値がないなら以下でいけますが、 あるならちょっと工夫が必要。 <?php $w[]=array('email'=>'gmail.com'); $w[]=array('email'=>'yahoo.co.jp'); $w[]=array('email'=>'yahoo.co.jp'); $w[]=array('email'=>'hotmai.com'); $a[]=array('email'=>'yahoo.co.jp'); $a[]=array('email'=>'gmail.com'); $a[]=array('email'=>'infoseek.com'); foreach($w as $key1=>$val1){ foreach($a as $key2=>$val2){ if ($val1==$val2){ unset($w[$key1]); unset($a[$key2]); } } } print_r($a); print_r($w); ?>

関連するQ&A

  • arrayをどうやって表示するのか?

    array をどうやって表示したら良いのでしょうか? 一応参考書には下記のようなコードがあってそのまま打つと普通にブラウザには出てこないので、print を文頭につけたのですが、「array 」としか出てこないので、どうしたら良いのかわかりません。当然のことながら$cだけ表示できたら良いです。どうかご教授よろしくお願いします。 $a = array(1,2,3); $b = array(1,3,4); $c = array_diff($a,$b);

    • ベストアンサー
    • PHP
  • array_combineがうまくいかないので、教

    array_combineがうまくいかないので、教えてください ■やりたいこと ・一方の配列をキー、もう一方の配列を値として、新たな配列を生成したい ■現状 $c = array_combine($a , $b);とやると、 Array c (   [1] => 2   [2] => 0   [3] => 0 ) となってしまいます ■元データ Array a (   [0] => 1   [1] => 2   [2] => 2   [3] => 1   [4] => 3   [5] => 1   [6] => 2   [7] => 2   [8] => 3   [9] => 1 ) Array b (   [0] => 0   [1] => 2   [2] => 0   [3] => 2   [4] => 2   [5] => 0   [6] => 2   [7] => 0   [8] => 0   [9] => 2 ) ■質問 ・元データから、下記結果を得るにはどうすればよいでしょうか? Array c (   [1] => 0   [2] => 2   [2] => 0   [1] => 2   [3] => 2   [1] => 0   [2] => 2   [2] => 0   [3] => 0   [1] => 2 ) ・また、array_combineだとなぜ望む結果が得られないのでしょうか? 重複しているから?

    • ベストアンサー
    • PHP
  • array_fill について php

    <?php $a = array_fill(-2, 4, 'pear'); print_r($a); ?> Array ( [-2] => pear [0] => pear [1] => pear [2] => pear ) 出力結果なのですが、配列で[-1]がないのはなぜでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 空の配列を削除して、詰めていく。

    データベースから値を取ってくるとき、全て、同じ値が入ってくる場合があります。 $a = array(100,100,100,100,100)というような。 これを、array_uniqueで重複している値を削除したのですが、その際、print_rで見ると、 Array ( [4] => 100 ) と表示されました。つまり、キーが0ではなく、4となってしまっています。 array_uniqueで帰ってきた値が複数なら、さらにsortすることで0から始まる配列として並び替えられるのですが、1つしか帰ってこないとsortをしても、キーは変わらないようです。 この値を表示させるとき、countで配列の数を数え、さらにfor文でcountの数だけ回し、print $i;で表示させるようにしているのですが、上記のようにarray_uniqueで1つの値しか帰ってこないと、ページに値がきちんと表示できなくなってしまいます。 これを解決するために、空の要素を削除して、空白でない要素のキーを前に詰めてくれるような関数などを探しているのですが、何か方法などありますでしょうか? Array ( [4] => 100 ) が Array ( [0] => 100 )となるようにしたいのです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • mysql_fetch_arrayを何度も使いたい

    phpとmysqlを使っています。 配列$valuesがあります。 その値は一部だけmysqlのフィールドdの中に格納しています。 両方の値を比較してもし一致すればチェックボックスを作るという処理をしています。 また、同時に一致した数もそれぞれ取得したいと考えています。 イメージ的には、□はチェックボックスとして()には、その配列の値とフィールドdの値に一致する数が入ります。 □(33) □(13) □(1) □(22) □(3)  □(16) □(15) □(9) □(23) □(32)  □(4) □(16) □(7) □(6) □(11)  □(5) □(21) □(1) □(4) □(15)  □(13) □(10) □(3) □(19) □(8)  □(0)のとき非表示になるようにしています。 <?php $m = mysql_connect('localhost','root',password); $mm = "SELECT * FROM tableA"; mysql_set_charset('utf8'); $mmm = mysql_query($mm,$m); $values=array( "chk1"=>array("a1","a2","a3","a4","a5","a6","a7","a8","a9","a10") ,"chk2"=>array("b1","b2","b3","b4","b5","b6","b7","b8","b9","b10") ,"chk3"=>array("c1","c2","c3","c4","c5","c6","c7","c8","c9","c10") ); foreach($values as $key=>$array){ foreach($array as $val){ $checked=(isset($_REQUEST[$key]) and in_array($val,$_REQUEST[$key]))?" checked":""; $count = ""; while($r = mysql_fetch_array($mmm)){ if($val === $r['d']){$count++:} } if($count>0 && !$count==""){ $h = $h.htmlspecialchars($val, ENT_QUOTES, 'UTF-8').'<input type="checkbox" name="'.$key.'[]" value="'.$val.'"'.$checked.'/>('.$count.') '."\n"; } } } print "<br />\n"; } ?> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> </head> <body> <form method="get" action="checkbox2.php"> <?php echo $h; ?> <input type="submit" value="送信" /> </form> </body> </html> これではmysql_fetch_arrayが一度しか使えないので、配列の値a2以降が進みません。 こういうときはどのようにするべきでしょうか。 また、if($val === $r['d']){$count++:}でカウントしていますが、もっといい方法はありますか。 その他変な箇所があれば指摘して頂けると嬉しいです。 お願いします。

    • ベストアンサー
    • PHP
  • 配列の比較

    下記のような配列が二つあります。 1 $array1 = Array ( [0] => 20 [1] => 22 ) 2 $array2 = Array ( [0] => 20 [1] => 22 [2] => 18 [3] => 19 ) array_intersect関数を使い、 この配列を比較して、重複している値を取り出したいのですが、 どうしてもできません。 $intersect = array_intersect($array1,$array2); print_r($intersect); としましたが、だめです。根本的な構造が違うのか? または他の方法があるのか? ご教授お願いします。

    • ベストアンサー
    • PHP
  • array_randで要素が数字の場合の処理方法

    PHPのarray_randについて教えて下さい。 下記のようなソースを作りましたが思った通りの結果になりません。 //(A) $test=array(3,5,8,11,14,24,26,28); print_r($test); foreach ($test as $val) { echo $val.'<br>'; } //(B) $keys = array_rand($test, 5);//決められた数を抽出 print_r($keys).'<br><br>'; foreach ($keys as $val) { echo $val.'<br>'; } Aの部分の結果は Array ( [0] => 3 [1] => 5 [2] => 8 [3] => 11 [4] => 14 [5] => 24 [6] => 26 [7] => 28 ) foreachの部分の出力↓ 3 5 8 11 14 24 26 28 となりこれは特に問題ありません。 Bの部分でAの配列から5つランダムで取り出したいのですが、結果は Array ( [0] => 0 [1] => 3 [2] => 5 [3] => 6 [4] => 7 ) 0 foreachの部分の出力↓ 0 3 5 6 7 となってしまい、Aの配列の添え字の中から5つの数字が選ばれるようになってしまいます。 Aの添え字ではなく「3,5,8,11,14,24,26,28」の数字から5つランダムで取り出すにはどのような書き方をすればよいのでしょうか? ご回答よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 長いメールアドレスを作りたい

    お世話になります。 64byte以上の長いEメールアドレスを作成したいのですが フリーメールで簡単に作れるサイトがありましたら教えてください! PCから作りたいと思っています。 ヤフー・infoseek・goo・hotmailでは64byteに届かず又は失敗しました。 よろしくお願いいたします。

  • CollectionとArrayの呼び出し順

    こんばんは。 いつも勉強させてもらっています。 ご教授ください。 セル範囲A1:B3に適当な値を入れ 下記のコードを実行してみました。 ----------------------------------------------- Sub Test()   Dim Rng As Range   Dim myRange As Range   Set myRange = Range("A1").CurrentRegion     For Each Rng In myRange       Debug.Print "Collection: " & Rng.Value     Next Rng   Dim Ary   Dim myArray      myArray = Range("A1").CurrentRegion.Value     For Each Ary In myArray       Debug.Print "Array: " & Ary     Next Ary End Sub ----------------------------------------------- その結果、 Collectionの場合は、 A1>B1 >A2>B2 >A3>B3 Arrayの場合は、   A1>A2>A3 >B1>B2>B3 の順で呼び出されました。 なぜこのような違いがでるのか分かりません。 教えてください。 宜しくお願いします。   

  • HASH ARRAYの表示方法

    「print "@$token"」 とすると 「xxxx HASH(0x10063c0) ARRAY(0x10063a0) xxxx」 のように表示されます。 「HASH ARRAY」 の内容を表示したいのですが、どのようにすればよいのでしょうか? いろいろ試行錯誤したのですがどうしてわかりません。 具体的には「HTML::TokeParser」によって得た返値です。 $p = HTML::TokeParser->new(shift||"test.htm"); while (my $token = $p->get_tag("table")) { print "@$token\n"; } (参考) http://homepage3.nifty.com/hippo2000/perltips/html/TokeParser.htm

    • ベストアンサー
    • Perl