質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

4016閲覧

【PHP】preg_grepで配列の中に含まれる文字列を判別したい

igaiga

総合スコア144

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2016/01/21 01:33

###前提・実現したいこと
お世話になります。
PHPを勉強中ですが、どうしてもうまくいかないのでお知恵を拝借したく。
下記のようにして配列の中に含まれる間取り(1K、3LDKなど)をカテゴリ分けしたいと思います。
正規表現のチェックサイトでは正常に判別されていることを確認しているのですが、$madori0等には値が入らないです。。。

間違いがあればご指摘頂ければ幸いです。
よろしくお願いいたします。

###ソースコード

//既定の場所に間取りがあれば、それぞれ対応する変数に入ります $array_layout = array($layout1,$layout2,$layout3,$layout4,$layout5,$layout6,$layout7,$layout8,$layout9,$layout10); if(preg_grep('/1R|1K/', $array_layout)) {$madori0 = "1R/1K";} if(preg_grep('/1DK/', $array_layout)) {$madori1 = "1DK";} if(preg_grep('/1LDK/', $array_layout)) {$madori2 = "1LDK";} if(preg_grep('/^2K|^2DK|^2SDK/', $array_layout)) {$madori3 = "2K/2DK/2SDK";} if(preg_grep('/^2LDK|^2SLDK/', $array_layout)) {$madori4 = "2LDK/2SLDK";} if(preg_grep('/^3K|^3DK/', $array_layout)) {$madori5 = "3K/3DK";} if(preg_grep('/^3LDK/', $array_layout)) {$madori6 = "3LDK";} if(preg_grep('/^4/', $array_layout)) {$madori7 = "4DK/4LDK以上";} if(preg_grep('/^5/', $array_layout)) {$madori7 = "4DK/4LDK以上";} if(preg_grep('/^6/', $array_layout)) {$madori7 = "4DK/4LDK以上";}

###補足情報(言語/FW/ツール等のバージョンなど)
OSバージョン FreeBSD 9.1-RELEASE-p24 amd64
さくらのレンタルサーバ ビジネスプロ
Apacheバージョン Apache/2.2.29
PHP 5.4.45

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下のサイトで、添付したソースを動作させてみました
Ideone.com

PHP

1<?php 2 3// your code goes here 4$layout4 = '1R'; 5$layout1 = '4LDK'; 6 7$array_layout = array($layout1,$layout2,$layout3,$layout4,$layout5,$layout6,$layout7,$layout8,$layout9,$layout10); 8 9if(preg_grep('/1R|1K/', $array_layout)) {$madori0 = "1R/1K";} 10if(preg_grep('/1DK/', $array_layout)) {$madori1 = "1DK";} 11if(preg_grep('/1LDK/', $array_layout)) {$madori2 = "1LDK";} 12if(preg_grep('/^2K|^2DK|^2SDK/', $array_layout)) {$madori3 = "2K/2DK/2SDK";} 13if(preg_grep('/^2LDK|^2SLDK/', $array_layout)) {$madori4 = "2LDK/2SLDK";} 14if(preg_grep('/^3K|^3DK/', $array_layout)) {$madori5 = "3K/3DK";} 15if(preg_grep('/^3LDK/', $array_layout)) {$madori6 = "3LDK";} 16if(preg_grep('/^4/', $array_layout)) {$madori7 = "4DK/4LDK以上";} 17if(preg_grep('/^5/', $array_layout)) {$madori7 = "4DK/4LDK以上";} 18if(preg_grep('/^6/', $array_layout)) {$madori7 = "4DK/4LDK以上";} 19 20print_r($array_layout); 21echo "\n"; 22echo "MADORI0:".$madori0."\n"; 23echo "MADORI1:".$madori1."\n"; 24echo "MADORI2:".$madori2."\n"; 25echo "MADORI3:".$madori3."\n"; 26echo "MADORI4:".$madori4."\n"; 27echo "MADORI5:".$madori5."\n"; 28echo "MADORI6:".$madori6."\n"; 29echo "MADORI7:".$madori7."\n";

出力結果は以下のようになるので、プログラムとしては予想した動きをしているのではないでしょうか?
Array
(
[0] => 4LDK
[1] =>
[2] =>
[3] => 1R
[4] =>
[5] =>
[6] =>
[7] =>
[8] =>
[9] =>
)

MADORI0:1R/1K
MADORI1:
MADORI2:
MADORI3:
MADORI4:
MADORI5:
MADORI6:
MADORI7:4DK/4LDK以上

print_r($array_layout);
で、配列のダンプができるので、実行時の配列の中を確認してみてはいかがでしょうか?

投稿2016/01/21 03:50

KatsumiTanaka

総合スコア924

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

igaiga

2016/01/21 05:02

動作確認までして頂きありがとうございます! ご指摘いただいたようにprint_rで吐き出したところ、不要なタグまで入っておりました。。。 最初に確認するべきでした。お手数おかけいたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問