0

エラーが発生し、考えられるすべてのことをほとんど洞察なしでグーグルで検索しました。たぶん、あなたは新鮮な目のセットを手伝うことができます。

オブジェクトの配列を返す関数があります。次に、この関数を呼び出すコードは、この配列をループして、各オブジェクトで必要な処理を実行します。HTMLを吐き出すと視覚的に機能するように見えますが、サーバーログには「foreach()に無効な引数が指定されました」というエラーが表示されます。ええ、それが技術的に機能するのは素晴らしいことですが、私はこのエラーがもうポップアップしないようにしたいです。考え?

<?php

// The class whose method returns an array of library_Label objects
class library_Label
{
  public $id = null;
  public $name = null;

  public function getChildren()
  {
    // $children is declared earlier
    return $children;
  }
}


// main code
$columns = new library_Label(1);
foreach ($columns->getChildren() as $label) echo $label->Name;

?>
4

3 に答える 3

1

使用している言語はわかりませんが、PHPエラーのように見えます。もしそうなら、PHPのエラー報告レベルをチェックしてください。ただし、他のエラーをサーバーログにダンプしないように、php.iniの値を実際に変更する必要があります。

もちろん、そのエラーが関係なくスローされる理由を知りたいと思うでしょう。

于 2009-03-21T06:49:07.287 に答える
1

警告は、配列ではない変数に対して"Invalid argument supplied for foreach()"を実行しようとすると発生します。foreach

getChildren()からの戻り値が実際に配列であることを確認する必要があります。

コンストラクターソースも実際に作成するコードも提供していないため、コンテキストからこれを判断することはできません$children。それが間もなく行われるのであれば、あなたを助ける方が簡単かもしれません。

試してみることができることの1つはforeach、を実行する前に戻り値を出力すること"print_r($columns->getChildren())"です。これは、それが配列であるかどうかを明確に示す必要があります。

empty()また、またはを使用して、配列が空であるかどうかを確認することをお勧めしcount()ます。ネット上の一部のサイトでは、空の配列でもこの警告が発生することが示されていますが、それをテストするためのPHP環境が自宅にありません。

于 2009-03-21T08:02:06.067 に答える
1

これはかなり一般的ですが、私の解決策は常にこれを変更することです:

foreach ($columns->getChildren() as $label) echo $label->Name;

$children = $columns->getChildren();
if (is_array($children)) foreach ($children as $label) echo $label->Name;

すべての状況をカバーする必要があります。

必要に応じて、中括弧を使用して完全な if ステートメントに展開し、else ブロックを含めて、子が空の場合の状況を処理することもできます。

于 2009-03-21T08:29:20.977 に答える