• ベストアンサー

配列の抽出

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; ?>

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

  • ベストアンサー
  • 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