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

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

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

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

Q&A

解決済

4回答

3054閲覧

array_key_existsの存在意義とは?

KOMANETI

総合スコア16

PHP

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

0グッド

2クリップ

投稿2020/10/29 09:36

###質問
PHPでarray_key_existsという関数を知ったのですが、issetで十分ではないでしょうか?
この関数を使うべきケースを教えて頂けませんでしょうか。

###比較コード
まず以下の例を見ても

issetarray_key_existsでは実現できませんが(NULLかどうかは判定できない)

array_key_existsissetで実現できますよね

それなのにarray_key_existsを使わないといけない(使った方が便利だ)というのがどういうケースなのかわからないのですが…

みなさん何が思いつきますでしょうか?

php

1$array = array('Jhon' => 23, 'Mike' => 31); 2 3if ( array_key_exists('Mike', $array) ) { 4 echo "配列内にMikeというキーは存在します\n"; 5} 6 7if ( isset($array['Mike']) ) { 8 echo "配列内にMikeというキーは存在し要素はNULLではありません\n"; 9}

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

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

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

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

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

guest

回答4

0

array_key_existsはissetで実現できますよね

できません

echo "配列内にMikeというキーは存在し要素はNULLではありません\n";

の部分について、以下の通りマニュアルに説明があります

気になった時はphpマニュアルを見てみましょう

例2 array_key_exists() 対 isset()

isset() は NULL 値を持つ配列キーに対して TRUE を返しません。一方、array_key_exists() は TRUE を返します。

投稿2020/10/29 09:55

hentaiman

総合スコア6419

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

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

KOMANETI

2020/10/30 09:46

NULLそうでしたね。マニュアル気にするようにします。ありがとうございます。
hentaiman

2020/10/30 17:30

そうでしたねっていうか、その一点だけが最も重要で且つ勘違いされていた点です。どんな意図が含まれていようがどんな考え方をしていようがそのたった一つの大きな勘違いを重要視出来ていないのだとしたら、この回答はあなたの役には立ちません。
guest

0

ベストアンサー

便利とか不便というよりも、array_key_existsだと、配列内にキーが存在しているかどうかのチェックである「プログラムの意図」がひと目でわかることにより、プログラムの可読性が増すという点が大きいと思います。
そして現実問題としては、isset($array['Mike']) だと、$arrayそのものがセットされているかも同時にチェックすることになるので、「意図」がぼやけると思います。

投稿2020/10/29 11:54

ockeghem

総合スコア11701

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

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

KOMANETI

2020/10/30 09:45

プログラムの意図とはしっくりくるご回答でした。ありがとうございます。
guest

0

この関数を使うべきケースを教えて頂けませんでしょうか。

連想配列の値がNULLである時にそのキーが存在するかを確認するのはissetでは実現できませんよね。
そのようなケースが発生したら使えばいいです。

  1. 連想配列の値全てにNULLを設定する(初期化など)
  2. キーが存在するかを確認する
  3. キーが存在すれば何か処理を行う

というような処理は特にケースを特定しなくても存在するかと思います。

関数やメソッドは用途と仕様がマッチするケースで使えばいいのであって、(非推奨になっているようなものを除いて)この関数を使わなければいけない この関数を使うべきであるというようなルールはプロジェクトの事情や要件で随時決められるものであって、一般的に定義するような性質のものでは無いと思います。

投稿2020/10/29 10:05

tanat

総合スコア18713

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

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

KOMANETI

2020/10/30 09:45

ありがとうございます。NULLの件間違っていました。
guest

0

issetはarray_key_existsでは実現できませんが(NULLかどうかは判定できない)

array_key_existsはissetで実現できますよね

逆では?もちろん配列要素の存在に限定しての話ですが。

PHP

1$foo = ["a"=>1, "b"=>NULL]; 2 3var_dump(isset($foo["a"])); // => true 4var_dump(isset($foo["b"])); // => false 5var_dump(isset($foo["c"])); // => false 6 7var_dump(array_key_exists("a",$foo)); // => true 8var_dump(array_key_exists("b",$foo)); // => true 9var_dump(array_key_exists("c",$foo)); // => false 10// issetの代用 11var_dump(array_key_exists("a",$foo) && $foo["a"]!==NULL); // => true 12var_dump(array_key_exists("b",$foo) && $foo["b"]!==NULL); // => false 13var_dump(array_key_exists("c",$foo) && $foo["c"]!==NULL); // => false

isssetに何を組み合わせればtrue true falseに出来るのでしょうか?

投稿2020/10/29 09:58

otn

総合スコア84540

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

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

KOMANETI

2020/10/30 09:46 編集

各条件での出力ありがとうございます。勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問