私は得ています
不正なオフセットタイプ
このコードの反復ごとにエラーが発生します。コードは次のとおりです。
$s = array();
for($i = 0; $i < 20; $i++){
$source = $xml->entry[$i]->source;
$s[$source] += 1;
}
print_r($s)
回答:
オブジェクトまたは配列をインデックスキーとして使用して配列インデックスにアクセスしようとすると、不正なオフセットタイプエラーが発生します。
例:
$x = new stdClass();
$arr = array();
echo $arr[$x];
//illegal offset type
お使いの$xml
アレイは、オブジェクトや配列が含まれている$xml->entry[$i]->source
いくつかの値のため$i
、そしてあなたがのためのインデックスキーとしてそれを使用しようとしたとき$s
、あなたはその警告が表示されます。必要$xml
なものが含まれていることと、正しくアクセスしていることを確認する必要があります。
$xml
ある種のXMLパーサーを使用して変数を作成しましたか?simple_xmlまたはDOMDocument?その場合、ソースノードは実際にはある種のdom要素オブジェクトである可能性があります。
$xml->entry[$i]->source->div
ます。HTMLをDOM構造に解析する場合DomDocument
は、loadHTML()
SimpleXMLよりもはるかに優れたHTMLを処理する関数があります。php.net/manual/en/domdocument.loadhtml.php
trim($source)
前に使用し $s[$source]
ます。
(string)$source
)、結果はその__toString()の実装に完全に依存します。SimpleXML
オブジェクトがある場合に機能します(明らかに誰もが想定しているものですが、質問で実際に述べられたことはありません)。
$ xml-> entry [$ i]が存在し、そのプロパティを取得しようとする前にオブジェクトであることを確認してください
if(isset($xml->entry[$i]) && is_object($xml->entry[$i])){
$source = $xml->entry[$i]->source;
$s[$source] += 1;
}
または$ sourceは正当な配列オフセットではなく、配列、オブジェクト、リソース、または場合によってはnullである可能性があります
xmlにはおそらく20未満のエントリがあります。
コードをこれに変更します
for ($i=0;$i< sizeof($xml->entry); $i++)
...
私も同様の問題を抱えていました。XMLの子から文字を取得したので、最初にそれを文字列(または必要に応じて整数)に変換する必要がありました。以下に、私がどのように問題を解決したかを示します。
foreach($xml->children() as $newInstr){
$iInstrument = new Instrument($newInstr['id'],$newInstr->Naam,$newInstr->Key);
$arrInstruments->offsetSet((String)$iInstrument->getID(), $iInstrument);
}
$source
がのインスタンスであるSimpleXML
と想定し、その特定の状況にのみ適用される情報を提供します。それは最終的には事実でしたが、質問はそれを述べていませんでした、そして参照のためにここに来る人は誰でもこれを考慮に入れるべきです。