0

チュートリアルの次のコードがありますが、いくつかのチュートリアルを見た後でも、非常に基本的なものであるにもかかわらず、その正確な仕組みを完全には理解できません。

  if(mysql_num_rows($result)) { 
    while($term = mysql_fetch_assoc($result)) {   
      $terms[] = array('term'=>$term);    
    }
  }

ここで IF ステートメントが実際に何をテストしているのか理解できません。MySQL_num_rows 関数がデータベース クエリによって返された行数をカウントし、整数を返すことはわかっています (このクエリの場合、行は 1 つだけです)。null でないことを確認するためにテストしていると思いますが、これは正しいですか? たとえそれがこの背後にある正確な論理であっても.

始めたばかりで初歩的な質問で申し訳ありません。

4

5 に答える 5

2

ステートメントでは、if値はチェック前にブール値に変換されます。

したがって、数値をmysql_num_rows返します。の場合0、 に変換されfalse1(またはそれ以上) になりtrueます。次に、ifブール変換に応じて実行されるかどうかが決まります。

PHPドキュメントから:

ブール値に変換する場合、次の値が考慮されFALSEます。

  • ブール値の FALSE 自体
  • 整数 0 (ゼロ)
  • float 0.0 (ゼロ)
  • 空の文字列、および文字列 "0"
  • 要素がゼロの配列
  • メンバー変数がゼロのオブジェクト (PHP 4 のみ)
  • 特別な型 NULL (未設定の変数を含む)
  • 空のタグから作成された SimpleXML オブジェクト

他のすべての値が考慮されますTRUE(すべてのリソースを含む)。

于 2012-11-15T16:21:15.657 に答える
1

結果があるかどうかを知るためのテストです。結果が返されない場合、値は false と評価される 0 になり、ループはスキップされます。

于 2012-11-15T16:20:40.847 に答える
0

PHP は if ステートメントを解釈する方法が非常に緩く、関数が何かを返したかどうか、または true であるかどうかをテストしています (インスタンス化されたものはすべて true としてカウントされるため、行がまったく返された場合は true としてカウントされます)。 、false (つまり、インスタンス化されていない場合は 0 またはエラーが返されます) または null/none (基本的には false と同じ)。

于 2012-11-15T16:23:39.287 に答える
0

この関数mysql_num_rows($result)は、選択された行の数を返します。0 を超える場合は TRUE に変換され、それ以外の場合は 0 -> FALSE に変換されます

于 2012-11-15T16:21:04.417 に答える
0

このループの各シーケンスで、ポインタが指すレコードをフェッチします。そしてポインタは次のレコードに移動します。ただし、(最後に)レコードがない場合、$term配列は空になり、ブール値と同等になりますFALSE

これを見てください:http://php.net/manual/en/language.types.boolean.php

そのため、while ループはこの時点で停止します。

于 2012-11-15T16:26:54.227 に答える