2012-09-05 11 views
12

Non capisco perché questo si sta verificando: Fondamentalmente, ho un array che contiene i seguenti matrici, vedere var_dump:Errore irreversibile: impossibile annullare l'errore di offset delle stringhe?

array(2) { 
    [0]=> array(1) { 
    [0]=> string(3) "ivr" 
    } 
    [1]=> array(1) { 
    [0]=> string(9) "ivr_dests" 
    } 
} 

Ovviamente questi dati è una specie di ridondante, ma è ciò che è stato restituito durante il recupero i valori con XPath. Quindi eseguo un foreach per eseguire il ciclo attraverso il primo array() e assegnare i valori di array nidificati nel primo array.

In sostanza, si dovrebbe restituire questo:

array(2) { 
    [0]=> string(3) "ivr" 
    [1]=> string(9) "ivr_dests" 
} 

Così qui è quello che ho l'installazione:

foreach($arr as $key => $arr2){ 
    $arr2[$key] = $arr2[$key][0]; 
    unset($arr2[$key][0]); //This returns Fatal error: Cannot unset string offsets 
//if I comment out the unset(), $arr[$key] returns the same value as it did (multidim array) 
}; 

     //I tried this too: 
$i=0; 
foreach($arr as $arr2){ 
    $arr2[$i] = $arr2[$i][0]; 
    $i++; 
} 

Tutte le idee che sto facendo male? Dovrei andare su questo altro modo?

Grazie,

risposta

7

Non è necessario il disinserimento, che si sta ignorando l'parametri esterni con il valore della matrice interna in contrasto con l'intero array.

$a1 = array("ivr"); 
$a2 = array("ivr2"); 

$a3 = array($a1, $a2); 

foreach($a3 as $key => $value){ 
    $a3[$key] = $a3[$key][0]; 
    //unset($arr2[$key][0]); 
}; 

var_dump($a3); 

Penso che tu sia confuso su come funziona foreach.

foreach($array as $key => $value) 
{ 
    echo $key; 
    echo $value; 
} 

visualizza la chiave e il valore per ogni coppia chiave/valore in una matrice.

+0

questo ha un senso. Una parte della mia confusione era che ho disattivato un array in precedenza, ma ora mi rendo conto che stavo creando un nuovo array e disattivando quello vecchio, non sovrascrivendo uno come questo esempio. Il tuo esempio mi aiuta a dare un senso anche a 'foreach()', grazie! – Jared

2

Credo di avere la sintassi per la foreach sbagliato ... che dovrebbe essere $key => $value dove si ha $key => $arr2. Quindi, quando hai $arr2[$key] stai cercando l'elemento $key nell'array nidificato $arr2. $arr2 è referenziato da $key, che è una stringa (per un array associativo) o un intero (per un array non associativo). $arr2 potrebbe anche essere referenziato da $arr[$key].

http://php.net/manual/en/control-structures.foreach.php

6

Ho riscontrato questo errore in una situazione leggermente diversa che potrebbe rivelarsi utile.

unset($search['param']['complete']) 

Questo ha gettato lo stesso errore quando $ ricerca [ 'param'] era ancora una stringainvece di un array di .

1

L'errore è nel codice.
Dopo aver assegnato

$arr2[$key] = $arr2[$key][0]; 

$arr2[$key] diventa la stringa "ivr" e $arr2[$key][0] è il primo carattere della stringa e non può essere disinserito