2011-05-16 9 views
26

Buenos días a todos:PHP - no puede utilizar un escalar como una matriz de advertencia

tengo el siguiente código:

$final = array(); 
    foreach ($words as $word) { 
     $query = "SELECT Something"; 
     $result = $this->_db->fetchAll($query, "%".$word."%"); 
     foreach ($result as $row) 
     { 
      $id = $row['page_id']; 
      if (!empty($final[$id][0])) 
      { 
       $final[$id][0] = $final[$id][0]+3; 
      } 
      else 
      { 
       $final[$id][0] = 3; 
       $final[$id]['link'] = "/".$row['permalink']; 
       $final[$id]['title'] = $row['title']; 
      } 
     } 
    } 

El código parece funcionar bien, pero me da esta advertencia:

Warning: Cannot use a scalar value as an array in line X, Y, Z (the line with: $final[$id][0] = 3, and the next 2). 

¿Puede alguien decirme cómo deshacerse de él? Gracias.

+0

¿Es este el código real? He intentado reproducir el problema y no pude ... –

+0

@ alvaro-g-vicario Tiene razón en que al código de la lista le falta la declaración que causaría el error. Algo como '$ final [$ id] = $ row ['page_id'];' es necesario para hacer que PHP se queje –

+0

que es el código real. es copiar pegar – zozo

Respuesta

42

Debe establecer $final[$id] en una matriz antes de agregarle elementos. Intiialize ya sea con

$final[$id] = array(); 
$final[$id][0] = 3; 
$final[$id]['link'] = "/".$row['permalink']; 
$final[$id]['title'] = $row['title']; 

o

$final[$id] = array(0 => 3); 
$final[$id]['link'] = "/".$row['permalink']; 
$final[$id]['title'] = $row['title']; 
+1

Puede simplificar algunas líneas en el primer caso a '$ final [$ id] [] = 3;' y en el segundo a '$ final [$ id] = array (3);' :) – Tadeck

+2

@ Tadeck, sí puedes, pensé que sería explícito;) –

+0

funciona como un sueño. – zozo

48

Un poco tarde, pero a cualquiera que se pregunta por qué están recibiendo la "Advertencia: No se puede utilizar un valor escalar como una matriz" del mensaje;

la razón es porque en algún lugar primero ha declarado su variable con un número entero o cadena y luego está tratando de convertirla en una matriz.

esperanza de que ayuda a

+12

+1 problema explicado, en lugar de solo dar solución. – Edward

+0

, pero ¿por qué no se queja php al asignar elementos de matriz a esa variable "plana" en primer lugar? – Marki555

+0

no estoy seguro de entender marki555; si lo declaras como una matriz desde el principio, entonces estás bien – Lan

0

También asegúrese de que no se declara un array y luego intenta asignar algo más a la matriz como una cuerda, flotador, número entero. Tuve ese problema Si haces algunos ecos de salida, estaba viendo lo que quería la primera vez, pero no después de otro pase del mismo código.

0

El otro problema que he visto en esto es cuando se anidan matrices Esto tiende a tirar de la advertencia, tenga en cuenta lo siguiente:

$data = [ 
"rs" => null 
] 

este anterior funcionará absolutamente bien cuando se usa como:

$data["rs"] = 5; 

Pero el siguiente va a lanzar una advertencia ::

$data = [ 
    "rs" => [ 
     "rs1" => null; 
     ] 
    ] 
.. 

$data[rs][rs1] = 2; // this will throw the warning unless assigned to an array 
Cuestiones relacionadas