0

見たい出力を見ることができますが、理解できないエラーが 2 つあります。

 Notice: Undefined offset: 0 in C:\wamp\www\dash\handle_dashim.php on line 23
 Notice: Trying to get property of non-object in C:\wamp\www\dash\handle_dashim.php on line 23

コードの重要な部分:

//move the objects into array.
$dasharr=array();
$i=1;
while(($row = mysql_fetch_array($dashim))) { 
    $dasharr[$i]=new dash($row["name"],$row["msg"],$row["msg_date"],$row["votes"]);
    $i++;
}

//checks the object with the most votes.
$numofdash=count($dasharr); 
$mostvotes=$dasharr[$numofdash];
while($numofdash>0){
    if(($mostvotes->votes)<($dasharr[$numofdash-1]->votes)){ //line 23
    $mostvotes=$dasharr[$numofdash-1];
    }
    $numofdash--;
}


echo $mostvotes->name; //I can see the output that I want

?>
4

4 に答える 4

1

$i=1ファイルの上部にあります。

したがって、最初の行は$dasharr[$i]どちらが$dasharr[1]上です。したがって、ループでの最初の時間は未定義になります$dasharr[1-0]$dasharr[0]

于 2013-03-27T20:57:32.253 に答える
0

あなたが持っている: 1の$dasharr[$numofdash-1]場合、上記のwhileループで設定されていない$numofdashものを参照しています。$dasharr[0]

于 2013-03-27T20:57:27.973 に答える
0

$iコードの最初の 6 行から削除してください。

$dasharr=array();
while(($row = mysql_fetch_array($dashim))) { 
    $dasharr[] = new dash($row["name"],$row["msg"],$row["msg_date"],$row["votes"]);
}

すべての配列インデックスが 0 で始まり、1 で始まるため、配列は連想配列になります。これは、たとえばforeachステートメントを使用して列挙する必要があることを意味します。

たとえば、5 つの行がある場合、次の $dasharr 構造になります。

[1] => dash object,
[2] => dash object,
[3] => dash object,
[4] => dash object,
[5] => dash object

count($dasherr)と同じよう5に、コードは index を持つ要素に到達することはありません5。あなたの場合、 index を持つ要素をリクエストするとエラーが発生します0

将来このような問題を回避するには、var_dump()関数を使用してデバッグします。

于 2013-03-27T21:03:41.690 に答える
0

答え

これらの通知はどちらも同じ問題を指しています。$dasharrインデックスからインデックスを割り当て始めますが、1これは少し変わっており、プログラミング規則と矛盾しています。次に、バックワード while ループ テストを実行し、(設定していないもの) whenをwhile($numofdash > 0)取得しようとしています。$dasharr[$numofdash-1]$dasharr[0]$numofdash = 1

この問題には、次の 2 つの迅速な解決策があります。

  • while ループを$numofdash > 1代わりにテストするように設定します
  • (推奨)から$dasharr開始する0

その他の調整

後者に従う場合は、$i変数の使用を簡単に削除できます。

$dasharr = array();
while(($row = mysql_fetch_array($dashim)))
    $dasharr[] = new dash($row["name"], $row["msg"], $row["msg_date"], $row["votes"]);

表記法は$a[] = ...、オブジェクトを配列内の最も近い空のインデックスにプッシュします (自動的に から始まります0)。

コードの最後の部分でforループの代わりにループを使用することをお勧めしますか?while

$mostvotes = $dasharr[$numofdash];
for ($numofdash = count($dasharr); $numofdash > 0; $numofdash--)
    if(($mostvotes->votes) < ($dasharr[$numofdash-1]->votes))
        $mostvotes = $dasharr[$numofdash-1];
于 2013-03-27T21:07:22.207 に答える