Me estoy poniendo
tipo de compensación ilegal
error para cada iteración de este código. Aquí está el código:
$s = array();
for($i = 0; $i < 20; $i++){
$source = $xml->entry[$i]->source;
$s[$source] += 1;
}
print_r($s)
Respuestas:
Los errores de tipo de desplazamiento ilegal ocurren cuando intenta acceder a un índice de matriz utilizando un objeto o una matriz como clave de índice.
Ejemplo:
$x = new stdClass();
$arr = array();
echo $arr[$x];
//illegal offset type
Su $xml
matriz contiene un objeto o matriz en $xml->entry[$i]->source
por algún valor de $i
, y cuando intenta usar eso como clave de índice $s
, obtiene esa advertencia. Tendrás que asegurarte de que $xml
contiene lo que quieres y que estás accediendo a él correctamente.
$xml
variable utilizando algún tipo de analizador XML? simple_xml o DOMDocument? En ese caso, es probable que el nodo de origen sea en realidad algún tipo de objeto de elemento dom.
$xml->entry[$i]->source->div
. Si desea analizar HTML en una estructura DOM, DomDocument
tiene una loadHTML()
función que maneja HTML mucho mejor que SimpleXML. Echa un vistazo a php.net/manual/en/domdocument.loadhtml.php
Úselo trim($source)
antes $s[$source]
.
(string)$source
) y los resultados dependen completamente de su implementación __toString () . Funciona si tiene un SimpleXML
objeto (algo aparentemente asumido por todos pero nunca declarado en la pregunta).
comprobar $ xml-> entrada [$ i] existe y es un objeto antes de intentar obtener una propiedad del mismo
if(isset($xml->entry[$i]) && is_object($xml->entry[$i])){
$source = $xml->entry[$i]->source;
$s[$source] += 1;
}
o $ source podría no ser un desplazamiento de matriz legal sino una matriz, objeto, recurso o posiblemente nulo
Probablemente haya menos de 20 entradas en su xml.
cambia el código a este
for ($i=0;$i< sizeof($xml->entry); $i++)
...
Tuve un problema similar. Como obtuve un carácter de mi hijo XML, tuve que convertirlo primero en una cadena (o entero, si lo espera). A continuación se muestra cómo resolví el problema.
foreach($xml->children() as $newInstr){
$iInstrument = new Instrument($newInstr['id'],$newInstr->Naam,$newInstr->Key);
$arrInstruments->offsetSet((String)$iInstrument->getID(), $iInstrument);
}
$source
es una instanciaSimpleXML
y proporcionan información que solo se aplica a esa situación específica. Si bien ese fue finalmente el caso, la pregunta no lo expresó y quienquiera que venga aquí como referencia debe tener esto en cuenta.