Sto ottenendo
tipo di offset illegale
errore per ogni iterazione di questo codice. Ecco il codice:
$s = array();
for($i = 0; $i < 20; $i++){
$source = $xml->entry[$i]->source;
$s[$source] += 1;
}
print_r($s)
Risposte:
Si verificano errori di tipo offset illegali quando si tenta di accedere a un indice di matrice utilizzando un oggetto o una matrice come chiave di indice.
Esempio:
$x = new stdClass();
$arr = array();
echo $arr[$x];
//illegal offset type
Il tuo $xmlarray contiene un oggetto o un array in corrispondenza $xml->entry[$i]->sourcedi un valore di $i, e quando provi a usarlo come chiave di indice per $s, ricevi quell'avvertimento. Dovrai assicurarti che $xmlcontenga ciò che desideri e di accedervi correttamente.
$xmlvariabile utilizzando una sorta di parser XML? simple_xml o DOMDocument? In tal caso, è probabile che il nodo di origine sia in realtà una sorta di oggetto elemento dom.
$xml->entry[$i]->source->div. Se vuoi analizzare l'HTML in una struttura DOM, DomDocumentha una loadHTML()funzione che gestisce l'HTML molto meglio di SimpleXML. Scopri php.net/manual/en/domdocument.loadhtml.php
Usa trim($source)prima $s[$source].
(string)$source) ei risultati dipendono interamente dalla sua implementazione __toString () . Funziona se hai un SimpleXMLoggetto (qualcosa apparentemente assunto da tutti ma mai realmente dichiarato nella domanda).
controlla $ xml-> entry [$ i] esiste ed è un oggetto prima di tentare di ottenerne una proprietà
if(isset($xml->entry[$i]) && is_object($xml->entry[$i])){
$source = $xml->entry[$i]->source;
$s[$source] += 1;
}
o $ source potrebbe non essere un offset di array legale ma un array, un oggetto, una risorsa o forse un valore nullo
Probabilmente ci sono meno di 20 voci nel tuo xml.
cambia il codice in questo
for ($i=0;$i< sizeof($xml->entry); $i++)
...
Ho avuto un problema simile. Quando ho ricevuto un carattere da mio figlio XML, ho dovuto convertirlo prima in una stringa (o in un intero, se te ne aspetti uno). Di seguito viene mostrato come ho risolto il problema.
foreach($xml->children() as $newInstr){
$iInstrument = new Instrument($newInstr['id'],$newInstr->Naam,$newInstr->Key);
$arrInstruments->offsetSet((String)$iInstrument->getID(), $iInstrument);
}
$sourcesia un'istanza diSimpleXMLe forniscono informazioni che si applicano solo a quella specifica situazione. Anche se alla fine era così, la domanda non lo diceva e chiunque venga qui per riferimento dovrebbe tenerne conto.