Recibo un extraño error de PHP después de actualizar mi versión de PHP a 5.4.0-3.
Tengo esta matriz:
Array
(
[host] => 127.0.0.1
[port] => 11211
)
Cuando trato de acceder así, recibo advertencias extrañas
print $memcachedConfig['host'];
print $memcachedConfig['port'];
Warning: Illegal string offset 'host' in ....
Warning: Illegal string offset 'port' in ...
Realmente no quiero simplemente editar mi php.ini y restablecer el nivel de error.
$memcachedConfig
no es esa matriz. Espectáculovar_dump($memcachedConfig);
var_export($memcachedConfig)
justo antes de la "impresión".Respuestas:
Por favor, intente de esta manera ... He probado este código ... Funciona ...
fuente
include_once($file);
. La matriz se ha compilado correctamente (la información de depuración lo muestra), sin embargo, tuvo que copiarse manualmente en otra matriz antes de poder usarse sin el mensaje de advertencia de desplazamiento de cadena ilegal de PHP.El error
Illegal string offset 'whatever' in...
generalmente significa: está tratando de usar una cadena como una matriz completa.Eso es realmente posible ya que las cadenas pueden tratarse como matrices de caracteres individuales en php. Entonces, está pensando que $ var es una matriz con una clave, pero es solo una cadena con claves numéricas estándar, por ejemplo:
Puedes ver esto en acción aquí: http://ideone.com/fMhmkR
Para aquellos que vienen a esta pregunta tratando de traducir la vaguedad del error en algo que hacer al respecto, como yo lo hice.
fuente
fetchAll(PDO::FETCH_ASSOC)
lugarfetch(PDO::FETCH_ASSOC)
y funcionó perfectamente.$variablename = [];
dos veces, en otra parte de mi código con el$variablename = "test";
que causó el mensaje de error.TL; DR
Estás intentando acceder a un
string
como si fuera una matriz, con una clave que es unstring
.string
No lo entenderé. En código podemos ver el problema:A fondo
Veamos ese error:
¿Qué dice? Dice que estamos tratando de usar la cadena
'port'
como un desplazamiento para una cadena. Me gusta esto:¿Qué causa esto?
Por alguna razón esperabas un
array
, pero tienes unstring
. Solo una confusión. Tal vez su variable fue cambiada, tal vez nunca fue unarray
, realmente no es importante.¿Qué se puede hacer?
Si sabemos que deberíamos tener un
array
, debemos hacer una depuración básica para determinar por qué no tenemos unarray
. Si no sabemos si tendremos unarray
ostring
, las cosas se vuelven un poco más complicadas.Lo que podemos hacer es todo tipo de comprobación para asegurarse de que no tenemos avisos, advertencias o errores con cosas como
is_array
yisset
oarray_key_exists
:Hay algunas diferencias sutiles entre
isset
yarray_key_exists
. Por ejemplo, si el valor de$array['key']
esnull
,isset
devuelvefalse
.array_key_exists
solo verificará que, bueno, la clave existe .fuente
Aquí hay muchas respuestas excelentes, pero descubrí que mi problema era bastante más simple.
Estaba tratando de ejecutar el siguiente comando:
y estaba recibiendo este
illegal string
error$x['name']
porque no había definido la matriz primero. Así que puse la siguiente línea de código antes de intentar asignar cosas a$x[]
:Y funcionó.
fuente
Un poco tarde a la pregunta, pero para otros que están buscando: obtuve este error al inicializar con un valor (tipo) incorrecto:
La forma correcta es:
fuente
A partir de PHP 5.4 necesitamos pasar el mismo valor de tipo de datos que una función espera. Por ejemplo:
Al invocar esta función, si se proporciona un valor de cadena como este:
Esto generará una advertencia de compensación ilegal debido a la falta de coincidencia del tipo de datos. Para resolver esto, puedes usar
settype
:fuente
Antes de verificar la matriz, haga esto:
fuente
En mi caso, cambio mysql_fetch_assoc a mysql_fetch_array y resuelvo. Se tarda 3 días en resolver :-( y las otras versiones de mi proyecto se ejecutan con fetch assoc.
fuente
En mi caso, lo resolví cuando cambié la función que realiza la consulta SQL después de:
return json_encode($array)
entonces:return $array
fuente
A mi me funciona:
Código de prueba mío:
Salida:
55
Compruébalo chicos. Gracias
fuente
Solo usa
antes de
Esto se debe a que nunca define lo que es $ memcachedConfig, por lo que de forma predeterminada se tratan con cadenas, no con matrices.
fuente
Resolví este problema usando la función trim (). El problema era con el espacio.
entonces intentemos
Espero que esto ayude.
fuente
Solo en caso de que ayude a alguien, recibí este error porque olvidé deserializar una matriz serializada. Definitivamente es algo que verificaría si se aplica a su caso.
fuente
Es antiguo pero en caso de que alguien pueda beneficiarse de esto. También recibirá este error si su matriz está vacía.
En mi caso tuve:
que cambié a:
fuente
Creo que la única razón para este mensaje es porque la matriz de destino es en realidad una matriz como cadena, etc. (JSON -> {"host": "127.0.0.1"}) variable
fuente
Para PHP
Solo asegúrese de verificar que el valor devuelto no esté vacío. Entonces, este ejemplo fue para PHP, así que descubra cómo verificar si una matriz está vacía en otros idiomas.
fuente