Estou entendendo
tipo de deslocamento ilegal
erro para cada iteração deste código. Aqui está o código:
$s = array();
for($i = 0; $i < 20; $i++){
$source = $xml->entry[$i]->source;
$s[$source] += 1;
}
print_r($s)
Respostas:
Erros de tipo de deslocamento ilegal ocorrem quando você tenta acessar um índice de matriz usando um objeto ou uma matriz como a chave do índice.
Exemplo:
$x = new stdClass();
$arr = array();
echo $arr[$x];
//illegal offset type
Seu $xml
array contém um objeto ou array at $xml->entry[$i]->source
para algum valor de $i
, e quando você tenta usar isso como uma chave de índice para $s
, você obtém aquele aviso. Você terá que se certificar de $xml
que contém o que deseja e que está acessando corretamente.
$xml
variável usando algum tipo de analisador XML? simple_xml ou DOMDocument? Nesse caso, é provável que o nó de origem seja realmente algum tipo de objeto de elemento dom.
$xml->entry[$i]->source->div
. Se você deseja analisar HTML em uma estrutura DOM, DomDocument
tem uma loadHTML()
função que lida com HTML muito melhor do que SimpleXML. Confira php.net/manual/en/domdocument.loadhtml.php
Use trim($source)
antes $s[$source]
.
(string)$source
) e os resultados dependem inteiramente de sua implementação __toString () . Funciona se você tiver um SimpleXML
objeto (algo aparentemente assumido por todos, mas nunca realmente declarado na pergunta).
check $ xml-> entry [$ i] existe e é um objeto antes de tentar obter uma propriedade dele
if(isset($xml->entry[$i]) && is_object($xml->entry[$i])){
$source = $xml->entry[$i]->source;
$s[$source] += 1;
}
ou $ source pode não ser um deslocamento de array legal, mas um array, objeto, recurso ou possivelmente nulo
Provavelmente, há menos de 20 entradas em seu xml.
mude o código para este
for ($i=0;$i< sizeof($xml->entry); $i++)
...
Eu tive um problema parecido. Como recebi um caractere do meu filho XML, tive que primeiro convertê-lo em uma string (ou inteiro, se você espera um). Veja a seguir como resolvi o problema.
foreach($xml->children() as $newInstr){
$iInstrument = new Instrument($newInstr['id'],$newInstr->Naam,$newInstr->Key);
$arrInstruments->offsetSet((String)$iInstrument->getID(), $iInstrument);
}
$source
é uma instância deSimpleXML
e fornecem informações que se aplicam apenas a essa situação específica. Embora tenha sido esse o caso, a questão não o dizia e quem quer que venha aqui como referência deve levar isso em consideração.