나는 얻고있다
잘못된 오프셋 유형
이 코드를 반복 할 때마다 오류가 발생합니다. 코드는 다음과 같습니다.
$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 구조로 구문 분석하려면 SimpleXML보다 HTML을 훨씬 잘 처리 DomDocument하는 loadHTML()기능이 있습니다. 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 자식에서 문자를 얻었을 때 먼저 문자열 (또는 예상하는 경우 정수)로 변환해야했습니다. 다음은 문제를 해결 한 방법을 보여줍니다.
foreach($xml->children() as $newInstr){
$iInstrument = new Instrument($newInstr['id'],$newInstr->Naam,$newInstr->Key);
$arrInstruments->offsetSet((String)$iInstrument->getID(), $iInstrument);
}
$source은SimpleXML해당 특정 상황에만 적용되는 정보를 제공 하는 인스턴스 라고 가정합니다 . 결국 그것이 사실 이었지만, 질문은 그것을 언급하지 않았으며 참조를 위해 여기에 오는 사람은 이것을 고려해야합니다.