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

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

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

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

3回答

1479閲覧

cakephp 二つのデータが一致しているかの場合のコードを書きたい

amaguri

総合スコア227

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2016/10/11 10:09

編集2016/10/12 01:27
PARTITION='yyy=123'; $PARTITION='PARTITION'; COLOMN_NAME='yyy'; $COLOMN_NAME='COLOMN_NAME';

今回やりたいことが

php

1if$COLOMN_NAME==$PARTITION=より前の値){ 2 $partition_flg=1; 3}

になるようなコードを書きたいのですが
この場合どのように書けばよろしいでしょうか?

if(preg_match("/^".$COLOMN."=.*/", $PARTITION)){ $partition_flg=1; }

別の質問でこの回答を教えていただきましたがうまく動きませんいきません。

どうすれば動くか教えていただきたいです

今回疑問なのがいただいた回答の
if(preg_match("/^".$COLOMN."=.*/", $PARTITION)){
$partition_flg=1;
}

$COLOMN_NAMEではなく$COLOMNの意味
また$COLOMN_NAMEにはデータがyyyしか入っていないので
if(yyyの頭文字から=の前まで,yyy=123)
となるのではないかと思い疑問でしかたがありません回答していただいた方に再度質問しましたがお返事が返ってこず、結果このコードでしたかった意図もわからず困っております。

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

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

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

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

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

KaedeKazane

2016/10/12 01:27

「PARTITION」「COLOMN_NAME」は定数で定義していて、「$PARTITION」「$COLOMN_NAME」には定義した定数名を格納している、という認識でよろしでしょうか? また、$COLOMNが定義されていないようですが$COLOMN_NAMEのことですか?
amaguri

2016/10/12 01:31

「PARTITION」「COLOMN_NAME」は定数で定義していています。$COLOMNが定義されていないようですが$COLOMN_NAMEのことですか?の関してこれは回答いただいた方のをそのままコピーさせていただいたのでおそらくミスだとは思うので$COLOMN_NAMEだと考えています
guest

回答3

0

PARTITION='yyy=123'; $PARTITION='PARTITION'; COLOMN_NAME='yyy'; $COLOMN_NAME='COLOMN_NAME';

恐らく$PARTITION、$COLOMN_NAMEには定数で定義した値を代入したいのでしょうが、定数名を''で囲っているため「PARTITION」「COLOMN_NAME」という文字列がそのまま代入されています。
定数を参照する場合は''""の外側に置いてください。

PARTITION='yyy=123'; $PARTITION=PARTITION; COLOMN_NAME='yyy'; $COLOMN_NAME=COLOMN_NAME;

余談

(1)定数の定義にconstがないですが省略しているだけですか?(CakePHPでは不要なのでしょうか…)
(2)定数と変数の表記が同じなのは混同しませんか? 私なら定数は大文字だけ、変数は小文字を中心に名付けます。
(3)動かないときに変数に期待した値が入っているかの確認はデバッグの基本です。

投稿2016/10/12 01:42

編集2016/10/12 01:49
KaedeKazane

総合スコア408

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

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

amaguri

2016/10/12 02:06

ご回答ありがとうございます 定数と変数の大文字小文字に分けるというの取り入れていきたいと思います。 とてもためになりました。
guest

0

失礼ですが、何がしたいか質問から読み取れません。
マニュアルのpreg_matchの項目をご覧ください。

正規表現が何だかわからない場合は、
サルにもわかる正規表現入門
このあたりを参照して基礎を学ぶことをお勧めします。

投稿2016/10/11 14:39

shi_ue

総合スコア4437

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

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

amaguri

2016/10/12 01:16

期待する動作として if($COLOMN_NAME==$PARTITIONの=より前の値){ $partition_flg=1; } で書いたあるように $COLOMN_NAMEのデータと $PARTITIONのデータの=より前のデータ が同じ時 $partition_flgが1になるというコードを書きたいです
amaguri

2016/10/12 01:26

今回疑問なのがいただいた回答の if(preg_match("/^".$COLOMN."=.*/", $PARTITION)){ $partition_flg=1; } $COLOMN_NAMEではなく$COLOMNの意味 また$COLOMN_NAMEにはデータがyyyしか入っていないので if(yyyの頭文字から=の前まで,yyy=123) となるのではないかと思い疑問でしかたがありません回答していただいた方に再度質問しましたがお返事が返ってこず、結果このコードでしたかった意図もわからず困っております。
guest

0

ベストアンサー

多分その前の質問に答えた者ですが。
上手く動かないというのがどういう状況か(どんなエラーが出てる?)わかりませんので憶測になりますが。
いくつか予想出来るところで回答します。

まず、バラバラになっている質問文のソースをまとめると

PHP

1PARTITION='yyy=123'; 2$PARTITION='PARTITION'; 3 4COLOMN_NAME='yyy'; 5$COLOMN_NAME='COLOMN_NAME'; 6 7ifpreg_match("/^".$COLOMN."=.*/", $PARTITION){ 8 $partition_flg=1; 9}

となりますが。

最初の

PHP

1PARTITION='yyy=123';

これはPHP構文的におかしいです。
定数を定義するのであれば

define('PARTITION', 'yyy=123');

とすべきで、変数を定義するのであれば先頭に$が必要です

$PARTITION='yyy=123';

$を付けた前提で考えると、その後に続く

$PARTITION='PARTITION';

が同じ変数名ですので、値が上書きされてしまいます。
COLUMN_NAMEについても同じことが言えます。

またCOLUMN_NAMEについては、変数名はCOLUMN_NAMEであるのに対し、正規表現中に埋め込まれている変数名は$COLUMNとなっていますので、このあたりも統一する必要があります。

また、このコードがソースコードファイルからコピペしたモノであるとすると、

PHP

1ifpreg_match("/^".$COLOMN."=.*/", $PARTITION){

この部分、( )が全角文字になっています。
このまま実行するとSyntax Errorとなるはずです。

このあたりを考慮し、以下の記述で実行しましたが、こちらでは動作しています。

PHP

1$partition_flg=0; 2 3$PARTITION='yyy=123'; 4$COLOMN='yyy'; 5 6if(preg_match("/^".$COLOMN."=.*/", $PARTITION)){ 7 $partition_flg=1; 8} 9 10echo $partition_flg.PHP_EOL;

上手く動かない、というところの詳細を教えてください。
Hitしない場合があるのであれば、その時のPARTITIONとCOLUMNの値があると助かります。
エラーが出るのであればエラーメッセージを記載していただけると助かります。

投稿2016/10/12 01:48

kunai

総合スコア5405

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

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

amaguri

2016/10/12 02:04

$COLOMN_NAMEで質問したつもりだったのですが$COLOMNという変数で回答をいただいていたのでそれが故意的なのか$COLOMNとしてご回答いただいていたのかがずっとわからずじまいでした。 今回の回答にてそれが解決できてよかったです。 またPARTITIONとCALAME_NAMEの件ですがすみませんこちらも自分のミスになります MySQLより取得したデータのカラムにPARTITIONとCOLOMN_NAMEがあったので それを取得したかったのですがその場合は $PARTITION=PARTITION $COLOMN_NAME=COLOMN_NAME になるのですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問