Error fatal: error no detectado: no se puede usar un escalar como una advertencia de matriz

2 minutos de lectura

avatar de usuario de zozo
zozo

Tengo el siguiente código:

 $final = [1 => 2];
 $id = 1;

 $final[$id][0] = 3;

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

Advertencia: No se puede usar un valor escalar como matriz en la línea X (la línea con: $final[$id][0] = 3).

¿Alguien puede decirme cómo solucionar esto?

  • Reproducibles: no se puede usar un valor escalar como matriz, pero los datos se actualizaron correctamente y error de PHP: no se puede usar un valor escalar como matriz

    – mickmackusa

    29 de diciembre de 2022 a las 8:53

Necesitas configurar$final[$id] a una matriz antes de agregarle elementos. Inicializarlo con cualquiera

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

o

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

  • Puede simplificar algunas líneas en el primer caso para $final[$id][] = 3; y en el segundo a $final[$id] = array(3); 🙂

    – Tadeck

    16 mayo 2011 a las 16:07


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

    – brian_d

    16 mayo 2011 a las 16:46

  • Esta solución resolvió mi problema, pero el “por qué” se me escapa. PHP, en la medida en que lo he usado, no requiere que declare el tipo de una variable. Mi código funcionaba bien, y luego, anoche, comenzó a arrojar este error por alguna razón inexplicable, del cielo azul claro. Por supuesto, en mi código MVC (CodeIgniter) asigno rutinariamente el tipo $data = array() en la parte superior de mis funciones. En mi simple jane php, rara vez lo hago. En php, no creo que sea obligatorio. Sin embargo, declarar mi variable como un tipo de matriz resolvió mi problema. Perplejo.

    – TARKUS

    5 de julio de 2016 a las 10:56

Avatar de usuario de Lan
LAN

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

El otro problema que he visto en esto es cuando se anidan matrices, esto tiende a generar la advertencia, considere lo siguiente:

$data = [
"rs" => null
]

esto de arriba funcionará absolutamente bien cuando se use como:

$data["rs"] =  5;

Pero lo siguiente arrojará una advertencia ::

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

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

  • Creo que en este caso es porque olvidaste citar el rs y rs1 en la última línea. Eso los convierte en constantes indefinidas, y así $data[rs] no está definido.

    – haciendo

    20 de marzo de 2022 a las 13:22

También asegúrese de no declararlo como una matriz y luego intente asignar algo más a la matriz como una cadena, flotante, entero. Tuve ese problema. Si haces algunos ecos de la salida, estaba viendo lo que quería la primera vez, pero no después de otra pasada del mismo código.

¿Ha sido útil esta solución?