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

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

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

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

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

4回答

1317閲覧

2つの項目の相関関係の判定

enigumalu

総合スコア192

PHP

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

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

0グッド

0クリップ

投稿2017/08/17 08:23

編集2017/08/17 09:46

1つ目の項目fooが空またはnullの場合、2つ目の項目barに値があった場合(0,空含む)と
2つ目の項目barが空またはnullの場合、1つ目の項目fooに値があった場合(0,空含む)の場合でエラーとしたいのですが、
未定義の場合を考慮しないといけないため冗長になってしまうこと。
fooはnullまたは0でくることもあるためissetがnullとundefinedをともにfalseとしてしまうとemptyが0をtrueとして判定するというところで悩んでいます
上手く判定するための良い書き方はありませんでしょうか?

if((isset($req['foo']) && !empty($req['foo'])) && (isset($req['bar']) && empty($req['bar'])) ){ var_dump(''); } if((isset($req['foo']) && empty($req['foo'])) && (isset($req['bar']) && !empty($req['bar'])) ){ var_dump(''); }

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

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

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

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

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

guest

回答4

0

やりたいことと、プログラムが一致していませんので想像で回答します。

仕様を見直したほうが良いと思いますが、仕様を変更できないのであれば下記はいかがでしょうか。

プログラムどおり

if((isset($req['foo']) && !empty($req['foo'])) && (isset($req['bar']) && empty($req['bar'])) )

if((isset($req['foo']) && empty($req['foo'])) && (isset($req['bar']) && !empty($req['bar'])) )

■ ロジック

  • $req['foo']$req['bar']の連想配列キーが存在している
  • $req['foo']$req['bar']どちらか一方のみがempty() == falseである

php

1if (array_key_exists('foo', $req) && array_key_exists('bar', $req)) { 2 if (!empty($req['foo']) xor !empty($req['bar'])) { 3 var_dump(''); 4 } 5}

やりたいことどおり

1つ目の項目fooが空またはnullの場合、2つ目の項目barに値があった場合(0,空含む)

2つ目の項目barが空またはnullの場合、1つ目の項目fooに値があった場合(0,空含む)

■ ロジック

  • $req['foo']$req['bar']の連想配列キーが存在している
  • $req['foo']または、$req['bar']0,空文字を含むempty() == falseである

php

1$_req = array_filter($req, function($value, $key) { 2 if ($key == 'foo' || $key == 'bar') { 3 return !empty($value) || $value == "0" || $value === ""; 4 } 5 return true; 6}, ARRAY_FILTER_USE_BOTH)); 7 8// foo, bar両方とも条件(empty() == false,0,空文字)を満たすものを除外 9if (array_key_exists('foo', $_req) xor array_key_exists('bar', $_req)) { 10 var_dump(''); 11}

投稿2017/08/27 01:12

Tomak

総合スコア1652

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

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

0

外してたら、ごめんなさい。

PHP

1 if(!(''==strval($req['foo']) && ''==strval($req['bar']))){ 2 var_dump(''); 3 }

投稿2017/08/17 11:46

編集2017/08/17 11:47
sazi

総合スコア25173

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

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

0

複雑な条件分岐を実現する時は、Rulerというライブラリを使ってみるとすっきり書けるかもしれません。
Github Ruler
複雑な条件分岐にサヨウナラ。PHPのルールエンジンRulerを使って複雑な条件をシンプルにしてみた

投稿2017/08/17 10:23

aro10

総合スコア4106

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

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

0

isset($req['foo']) && !empty($req['foo'])は冗長で、!empty($req['foo'])だけでいいです(emptyは、中身がなくても問題なくtrueになってくれます)。

投稿2017/08/17 08:35

maisumakun

総合スコア145183

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

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

maisumakun

2017/08/17 08:42

…って、求めている回答じゃなかったような気もします(改めて考えてみます)
enigumalu

2017/08/17 09:03

foo自体が項目として存在しない場合エラーになりませんでしょうか、emptyだけのとき何度かundefined indexを見ています
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問