• ベストアンサー

PHPである配列からある用件を満たす要素のみ取り出

1 1.1 1.1.1 1.2 1.2.1 1.2.3 1.3 1.4 1.5.1 1.5.2 という文字列が配列に入ってまして、「1.数字」(つまり2階層)だけの文字列の配列を 取り出すにはどうすればいのでしょうか?

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

  • ベストアンサー
回答No.1

各要素を正規表現で調べ、マッチした要素を配列に格納します。こんな感じです。 <?php $data_ar = array("1", "1.1", "1.1.1", "1.2", "1.2.1", "1.2.3", "1.3", "1.4", "1.5.1", "1.5.2"); $ans_ar = array(); foreach($data_ar as $data) { if (preg_match("/^[^.]+\.[^.]+$/",$data) > 0) { $ans_ar[] = $data; } } print_r($ans_ar); ?> 結果は次のようになります。 Array ( [0] => 1.1 [1] => 1.2 [2] => 1.3 [3] => 1.4 )

goo_mygwdisk_1
質問者

お礼

ありがとうございます。参考になりました。 で、今それのもっとややこしいものにとりかかってまして、 よろしければ下記にお答えいただければ幸いです。 http://oshiete.goo.ne.jp/qa/6922744.html

その他の回答 (1)

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

別解 一度配列を文字列につなげてpreg_match_allでチェックする <?PHP $data_ar = array("1", "1.1", "1.1.1", "1.2", "1.2.1", "1.2.3", "1.3", "1.4", "1.5.1", "1.5.2"); $data_str=implode($data_ar,"\n"); $pattern="/^1\.\d$/m"; preg_match_all($pattern,$data_str,$match); print_r($match[0]); ?> 配列を再帰的にチェックする <?PHP function check($item, $key, $data){ $pattern="/^1\.\d+$/"; if(preg_match($pattern,$item,$match)) array_push($data,$match[0]); } $data_ar = array("1", "1.1", "1.1.1", "1.2", "1.2.1", "1.2.3", "1.3", "1.4", "1.5.1", "1.5.2"); $data=array(); array_walk($data_ar, 'check', &$data); print_r( $data); ?>

goo_mygwdisk_1
質問者

お礼

なるほど1度配列を文字列に変えることは、考えてもみませんでした。 ありがとうございます。参考になりました。 で、今それのもっとややこしいものにとりかかってまして、 よろしければ下記にお答えいただければ幸いです。 http://oshiete.goo.ne.jp/qa/6922744.html

関連するQ&A