2012-09-05 8 views
12

No sé por qué esto está ocurriendo: Básicamente, tengo una matriz que contiene los siguientes matrices, consulte var_dump:Error fatal: ¿No se puede deshacer la cadena de errores de compensación?

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

Obviamente estos datos es una especie de redundancia, pero es lo que fue devuelto al obtener valores con XPath. Así que estoy haciendo un foreach para recorrer el primer array() y asignar sus valores de matriz anidados en el primer conjunto.

Básicamente, debe devolver esto:

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

Así que aquí es lo que he configurar:

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++; 
} 

Alguna idea de lo que estoy haciendo mal? ¿Debería hacerlo de otra manera?

Gracias,

Respuesta

7

No es necesario desarmar el, está sustituyendo los parámetros exteriores con el valor de la matriz interior en contraposición a todo el conjunto.

$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); 

Creo que está confundido acerca de cómo funciona foreach.

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

mostrará la clave y el valor de cada par de clave/valor en una matriz.

+0

que tenga sentido. Parte de mi confusión fue que desarmé una matriz más temprano, pero ahora me doy cuenta de que estaba creando una nueva matriz y desarmando la anterior, sin sobreescribir una como este ejemplo. Tu ejemplo me ayuda a dar sentido a 'foreach()' también, ¡gracias! – Jared

2

creo que usted tiene la sintaxis para el foreach mal ... que debería ser $key => $value donde tiene $key => $arr2. Entonces, cuando tiene $arr2[$key], está buscando el elemento $key en la matriz anidada $arr2. $arr2 se hace referencia en $key, que es una cadena (para una matriz asociativa) o un número entero (para una matriz no asociativa). $arr2 también se puede hacer referencia en $arr[$key].

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

6

Tuve este error en una situación ligeramente diferente que podría ser útil.

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

Esto arrojó el mismo error al $ de búsqueda [ 'parámetro'] seguía siendo una cadenaen lugar de una matriz .

1

El error está en el código.
Después de asignar

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

$arr2[$key] se convierte en la cadena "ivr" y $arr2[$key][0] es el primer carácter de la cadena y no se puede desarmar

Cuestiones relacionadas