• ベストアンサー

配列の抽出

PHPの配列の関数で数行程度でフィルターのような機能は可能なのでしょうか? 以下、サンプルですが血液型がAの新しい配列を作成するには、どのようにしたら良いのでしょうか? また、新しい配列でなく$matrixを血液型がAのみにする方法も知りたいです。 実際の例で示していただけましたら助かります。 <?php // 血液型(blood)がAの人のみの新しい、配列にしたい。 $agent1 = array( "blood"=>"A", "B"=> 80, "W"=> 60, "H"=> 85 ); $agent2 = array( "blood"=>"B", "B"=> 90, "W"=> 62, "H"=> 90 ); $agent3 = array( "blood"=>"O", "B"=> 78, "W"=> 56, "H"=> 80 ); $agent4 = array( "blood"=>"AB", "B"=> 81, "W"=> 59, "H"=> 83 ); $agent5 = array( "blood"=>"A", "B"=> 88, "W"=> 58, "H"=> 84 ); $matrix = array(); array_push($matrix, $agent1); array_push($matrix, $agent2); array_push($matrix, $agent3); array_push($matrix, $agent4); array_push($matrix, $agent5); var_dump($matrix); exit; ?>

  • ne5
  • お礼率4% (5/124)
  • PHP
  • 回答数2
  • ありがとう数0

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

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

この種の処理は、array_filterを使うのが便利です。例は下記 <?php -- $matrix生成までは省略 -- // 抽出は、下記 2行 function bloodA($x){return($x['blood'] =="A");} $matrix=array_filter($matrix,"bloodA"); print_r($matrix); ?>

その他の回答 (1)

  • dalianse
  • ベストアンサー率35% (7/20)
回答No.1

$agent1 = array( "blood"=>"A", "B"=> 80, "W"=> 60, "H"=> 85 ); $agent2 = array( "blood"=>"B", "B"=> 90, "W"=> 62, "H"=> 90 ); $agent3 = array( "blood"=>"O", "B"=> 78, "W"=> 56, "H"=> 80 ); $agent4 = array( "blood"=>"AB", "B"=> 81, "W"=> 59, "H"=> 83 ); $agent5 = array( "blood"=>"A", "B"=> 88, "W"=> 58, "H"=> 84 ); $matrix = array(); array_push($matrix, $agent1); array_push($matrix, $agent2); array_push($matrix, $agent3); array_push($matrix, $agent4); array_push($matrix, $agent5); $aryA = array(); for ($i = 0; $i < count($matrix); $i++) { if ($matrix[$i]["blood"] == "A") { array_push($aryA, $matrix[$i]); } } で、 Array ( [0] => Array ( [blood] => A [B] => 80 [W] => 60 [H] => 85 ) [1] => Array ( [blood] => A [B] => 88 [W] => 58 [H] => 84 ) ) ですが、こういうことですか?

ne5
質問者

補足

ご回答ありがとうございます。 関数を使わずにすると、そうですが 関数を使った場合(array_????)等の方法が知りたかったです。 実用面では、関数を使わない方法と、使う方法はどちらが良いのでしょうか?

関連するQ&A

  • ExcelのVBAで配列の処理 PHPから移行する新米ですが・・・

    PHPからVBAに移行を考えているのですが、VBAの考え方が難しい?わからず難儀しております。 ExcelのVBAで配列の処理を考えているのですが、以下のPHPと同じ動作をするVBAを書きたいのですが、どうすればよいのでしょうか? <?php // 配列を使って、$aを北海道、青森とする。$bは、単なる受け皿です。 // これをエクセルVBAではどのように記述するのでしょうか? $a = array(); $b = array(); array_push($a, "青森"); array_push($a, "青森"); array_push($b, array_pop($a)); array_unshift($a, "北海道"); array_unshift($a, "北海道"); array_push($b, array_shift($a)); var_dump($a); var_dump($b); exit; ?> また、PHPにはvar_dumpという便利なものがありますが、VBAでは VBEのローカルやウォッチ式で見るというのが普通でしょうか? イミディエイトにvar_dumpのように変数の内容を表示させるコマンドはあるのでしょうか?

  • 配列の基本

    perlだと@a = ('a'..'z','A'..'Z','0'..'9','_'); なんですが、PHPで $a = range('a', 'z'); array_push($a, range('A', 'Z'), range('0', '9'), '_'); とやって var_dump($a); で確認すると失敗していることがわかりました。 直してください。

    • ベストアンサー
    • PHP
  • JavaScriptで配列に配列を追加できません

    var array = [ ]; var add1 = ["a", "b"]; var add2 = ["c", "d"]; array.push(add1); array.push(add2); ----------------------------------------- 期待しているarrayの中身 [["a", "b"], ["c", "d"]] ----------------------------------------- 実際の実行結果 ["a", "b", "c", "d"] ----------------------------------------- どうすれば良いのでしょうか?

  • 配列内の値の取得について

    FlashBuilderです。 例1のようにすると問題なく取得できるのですが、 例2のようにするとobject,objectという値が返ってきてしまいます。 例2の配列内の値を参照するにはどのようにすれば、宜しいでしょうか? 例1: var myAry:Array=[]; myAry.push("a","b"); Alert.show(myAry[0]); 例2 var myAry:Array=[]; myAry.push({index:0, souce:"a"}); myAry.push({index:1, souce:"b"}); Alert.show(myAry[0]);

    • ベストアンサー
    • Flash
  • 連想配列のprint_rやvar_dump出力時における整形

    配列が入れ子になると、ダンプ時に改行が入らなくて見づらいです。 構造を視覚的に見やすくするにはどうしたら良いでしょうか。 利用しているエディタはPHPエディタです。 例: Array ( [a] => Array ( [b] => Array ・・・)

    • ベストアンサー
    • PHP
  • 関数内での繰り返し処理の結果を配列で受け取りたい

    関数内でfor文で繰り返し処理を行い、 結果を配列として返すような関数を書きたいと思っています。 function hoge(){ var a = [1,2,3,4]; for (var i=0; i < a.length; i++){ a1 = "a" + i; var arr = new Array(); arr.push(a1); } return arr; } しかし、以下のように 関数hogeの結果を変数bで受け取ってみると、 配列の最後のデータしか表示されません。 var b = hoge(); alert(b); //a3のみが表示される a0, a1, a2, a3と表示されるようにするには、 どうしたらよいでしょうか。

  • 2つの配列を1つにするには?

    var listWords1 = new Array ("a","b","c","d"); var listWords2 = new Array ("e","f"); // という2つの配列を下のような一つの配列にするにはどうすればいいですか? var listWords3 = new Array ("a","b","c","d","e","f"); 試しに var listWords3 = new Array(); listWords3 = listWords1 + listWords2 などとやってみましたがやっぱりダメでした。(^^; またもやド素人の質問でごめんなさい。自分なりに様々なキーワードでgoogleしているのですが、基本的なことすぎるのか、なかなか答えをヒットすることができません。私のような初心者がJavaScriptを基礎の基礎から勉強できるサイトがありましたら、併せてご紹介いただけませんでしょうか?よろしくお願いいたします。m(_ _)m

  • AppStoreのランキングを配列に入れたい

    AppStoreから取得したゲームアプリのランキングを連想配列に入れて、 アプリ名から順位を呼び出せるようにしたいのですが、 以下のコードを実行するとbool(false)になり、原因がどうしてもわかりません。 PHPのバージョンは5.3.3です。 <?php /* ランキングをXMLで取得 */ $xml = simplexml_load_file('https://itunes.apple.com/jp/rss/topgrossingapplications/limit=100/genre=6014/xml'); /* 10位までのタイトルと順位を配列にする */ $apprank = array(); for($a = 0; $a < 10; $a++) { $title_maker = $xml->entry[$a]->title; $rank = $a+1; preg_match("/.+(?=-)/", $title_maker, $title); $title =$title[0]; $apprank += array("$rank" => "$title"); } /* 「パズル&ドラゴンズ」の順位を呼び出す */ $matches = array_search("パズル&ドラゴンズ", $apprank); var_dump($matches); ?> $apprankの中身をvar_dumpで見ると、[1]=>string(28) “パズル&ドラゴンズ ” となるので、取得したアプリ名はちゃんと配列に収まっていると思うのですが、 array_searchでひっかからないのは何故でしょうか……?

    • ベストアンサー
    • PHP
  • phpのfor文の中で配列を作りたいです。

    $a = array(); $a[0]="あ"; $a[1]=""; $a[2]="い"; $a[3]=""; $a[4]=""; $a[5]="う"; のような配列がありfor文の中で文字列が一文字以上だったら配列$bに入れるということをしたいのですが、 $b=array(); for($i=0; $i<count($a); $i++){ $c = mb_strlen($a[$i]); if($c>=1){ $b = $a[$i]; } } var_dump($b); とすると$bには最後の”う”しか入りません。 $bを $b[0]="あ"; $b[1]="い"; $b[2]="う"; とするようにするにはどうしたらいいですか?

    • ベストアンサー
    • PHP
  • 配列を抜き出し新しい配列を作りたい

    いつも参考にさせて頂いています。 今あるボタンAに function sortFunc(a, b) { return a.ID-b.ID; } hoge = new Array(); hoge.push({ID:_root.g1, a:"○○", b:"mc_maru"}); hoge.push({ID:_root.g2, a:"△△", b:"mc_sankaku"}); hoge.push({ID:_root.g3, a:"□□", b:"mc_shikaku"}); hoge.sort(sortFunc); // 結果 { } for (var i = hoge.length; i>=0; i--) { trace(hoge[i].ID+hoge[i].a+hoge[i].b); this.key_text.text +=(("\r")+hoge[i].a); } } このような配列の並び替えをしています。 _root.g1、2、3の点数を受けて点数の高い順に並び替えしてる 物を_key.textと言うダイナミックテキストに渡して表示させています。 この並び替えを利用し点数の高いものを二つを抜きだしたいのですが、 Array.slice()をどうやって使えばいいのか分からず困っています。 わかる方いらしたら教えて頂けないでしょうか?

    • ベストアンサー
    • Flash