
PHPでの質問です。
$objectにはあるオブジェクトが入っており、
print_r($object)を実行すると以下の
2つのパターンが返ってくるとします。
パターン1(中身あり)
stdClass Object ( [item] => abc )
パターン2(中身なし)
stdClass Object ( )
以下のif文において
中身があるかどうかを判定するには
どうしたらいいでしょうか?
if(×××){
echo "中身あり";
}else{
echo "中身なし";
}
※ただし中身ありの場合、 [item] => abc は、 [fruit] => apple などのように
どんな要素が入っているかは分かりません。
//間違い例
//下記のコードだとどちらも「中身あり」が出力されます。
if(isset($object)){
echo "中身あり";
}else{
echo "中身なし";
}
またオブジェクトや要素などの言葉の使い方が間違っていたら
そちらも指摘して頂いたら幸いです。
以上よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
お礼拝見しました。
> $objectはstdClassです。
質問にも記述いただいていましたね。。。失礼しました。
それであればオブジェクト内のプロパティが分かれば良いので、
if(count(get_object_vars($object1)) === 0) {
のようにすれば判定可能かと思います。
プロパティ名が分かればproperty_exists() 関数も使用できますが、ちょっとケースが違うようなので。
http://php.net/manual/ja/function.get-object-var …
http://php.net/manual/ja/function.property-exist …
get_object_varsで配列として取得し、その配列数で判定するのですね。
ちなみに上記の回答を得るまでは、
考え方は一緒ですが、
foreach($object as $key => $val){
$object_array[] = $key;
}
で強引に配列にしてから
count($object_array)でやろうとしてました。
車輪の再発明をしなくてすみました。
どうもありがとうございました!
No.1
- 回答日時:
$objectの「中身なし」をどのように定義しているのでしょうか?
もし$object = ""; と宣言している場合は「空文字の値がセットされている」ということになるため、
isset($object) はture となります。
isset()と似た関数でempty()やis_null()などもありますので、
このあたりの違いについて確認いただくといいように思いました。
http://php.net/manual/ja/types.comparisons.php
回答誠にありがとうございます!
すみまん、$objectはstdClassです。
empty()もis_null()も試したみたのですが、
オブジェクト自体は存在するので分別できないようです。
一つの関数のみで判定するのは難しいようですね…。
下記の様なコードを作成してみました。
どちらも中身ありが出力されます。
<?php
//パターン1
$object1 = new stdClass;
$object1->item = "abc";
print_r($object1);//stdClass Object ( [item] => abc )
if(isset($object1)){
echo "中身あり";
}else{
echo "中身なし";
}
echo "<br />";
//パターン2
$object2 = new stdClass;
print_r($object2);//stdClass Object ( )
if(isset($object2)){
echo "中身あり";
}else{
echo "中身なし";
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- UNIX・Linux bashの変数でブランクがあるかチェックする方法教えて下さい。 3 2023/04/06 16:09
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Dosブロンプトでtabを出力したい
-
shシェルスクリプト 空白行の...
-
【PHP】define() て便利なよう...
-
syntax error, unexpected 'ech...
-
小数点以下0の非表示
-
switch()文で値の大小比較
-
XMLのタグの有無をPHPで判定し...
-
batファイルでPC名称の変更
-
バッチファイルで、全てのウィ...
-
phpで、可変項目のcsvデータ...
-
DBのハッシュ化したパスワード...
-
バッチファイルでpingの結果を...
-
checkboxでの複数選択削除がわ...
-
認証ダイアログが表示されない
-
phpでcookieがうまく保存されない
-
コマンドプロンプト フォルダ内...
-
RSSのデータを読み取って更新情...
-
findstrのerrorlevel
-
オブジェクトの中身の判定(PHP)
-
simplexmlでルート要素の値を取...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Dosブロンプトでtabを出力したい
-
バッチファイルでpingの結果を...
-
shシェルスクリプト 空白行の...
-
ゼロとNULLを区別して number_f...
-
findstrのerrorlevel
-
小数点以下0の非表示
-
switch()文で値の大小比較
-
syntax error, unexpected 'ech...
-
phpでcookieがうまく保存されない
-
Windowsのsetコマンドでの小数...
-
バッチファイルで、全てのウィ...
-
bashの関数の引数にスペースが...
-
DBのハッシュ化したパスワード...
-
コマンドプロンプト フォルダ内...
-
ウイルスもどき
-
pdftkを使った処理をバッチファ...
-
オブジェクトの中身の判定(PHP)
-
PHPでのパスワード制限のセキュ...
-
XMLのタグの有無をPHPで判定し...
-
batファイルでPC名称の変更
おすすめ情報