Eu recebo um erro estranho do PHP depois de atualizar minha versão do php para 5.4.0-3.
Eu tenho essa matriz:
Array
(
[host] => 127.0.0.1
[port] => 11211
)
Quando tento acessá-lo assim, recebo avisos estranhos
print $memcachedConfig['host'];
print $memcachedConfig['port'];
Warning: Illegal string offset 'host' in ....
Warning: Illegal string offset 'port' in ...
Eu realmente não quero apenas editar meu php.ini e redefinir o nível de erro.
$memcachedConfig
não é essa matriz. Showvar_dump($memcachedConfig);
var_export($memcachedConfig)
antes do "print".Respostas:
Por favor, tente desta forma .... Eu testei este código .... Funciona ....
fonte
include_once($file);
. A matriz foi criada corretamente (as informações de depuração mostram isso), no entanto, teve que ser copiada manualmente em outra matriz antes de ser usada sem a mensagem de aviso de PHP ilegal stringoffset.O erro
Illegal string offset 'whatever' in...
geralmente significa: você está tentando usar uma string como uma matriz completa.Isso é realmente possível, pois as strings podem ser tratadas como matrizes de caracteres únicos no php. Então você está pensando que $ var é uma matriz com uma chave, mas é apenas uma sequência com chaves numéricas padrão, por exemplo:
Você pode ver isso em ação aqui: http://ideone.com/fMhmkR
Para quem chega a essa pergunta tentando traduzir a imprecisão do erro em algo a fazer, como eu.
fonte
fetchAll(PDO::FETCH_ASSOC)
vezfetch(PDO::FETCH_ASSOC)
e funcionou perfeitamente.$variablename = [];
duas vezes, em outra parte do meu código$variablename = "test";
que causou a mensagem de erro.TL; DR
Você está tentando acessar um
string
como se fosse uma matriz, com uma chave que é umstring
.string
não vai entender isso. No código, podemos ver o problema:Em profundidade
Vamos ver esse erro:
O que isso diz? Diz que estamos tentando usar a string
'port'
como um deslocamento para uma string. Como isso:O que causa isso?
Por alguma razão, você esperava um
array
, mas você tem umstring
. Apenas uma confusão. Talvez sua variável tenha sido alterada, talvez nunca tenha sido umaarray
, não é realmente importante.O que pode ser feito?
Se sabemos que devemos ter um
array
, devemos fazer algumas depurações básicas para determinar por que não temos umarray
. Se não sabemos se teremos umarray
oustring
, as coisas ficam um pouco mais complicadas.O que podemos fazer é todo tipo de verificação para garantir que não tenhamos avisos, avisos ou erros com coisas como
is_array
eisset
ouarray_key_exists
:Existem algumas diferenças sutis entre
isset
earray_key_exists
. Por exemplo, se o valor de$array['key']
fornull
,isset
retornaráfalse
.array_key_exists
apenas verificará se a chave existe .fonte
Há muitas ótimas respostas aqui - mas achei que meu problema era um pouco mais simples.
Eu estava tentando executar o seguinte comando:
e estava recebendo esse
illegal string
erro$x['name']
porque não havia definido a matriz primeiro. Então, eu coloquei a seguinte linha de código antes de tentar atribuir coisas$x[]
:e funcionou.
fonte
Um pouco atrasado para a pergunta, mas para outros que estão pesquisando: Eu recebi esse erro ao inicializar com um valor errado (tipo):
O caminho certo é:
fonte
A partir do PHP 5.4, precisamos passar o mesmo valor de tipo de dados que uma função espera. Por exemplo:
Ao invocar esta função, se um valor de sequência for fornecido assim:
Isso gerará um aviso de deslocamento ilegal devido à incompatibilidade do tipo de dados. Para resolver isso, você pode usar
settype
:fonte
Antes de verificar a matriz, faça o seguinte:
fonte
No meu caso, altero mysql_fetch_assoc para mysql_fetch_array e resolvo. Demora 3 dias para resolver :-( e as outras versões do meu projeto são executadas com o fetch assoc.
fonte
No meu caso, eu o resolvi quando mudei na função que faz a consulta sql depois de:
return json_encode($array)
then:return $array
fonte
Funciona para mim:
Código de teste meu:
Resultado:
55
Verifique pessoal. obrigado
fonte
Apenas use
antes
isso ocorre porque você nunca define o que é $ memcachedConfig, portanto, por padrão, é tratado por string e não por matrizes.
fonte
Resolvi esse problema usando a função trim (). o problema estava no espaço.
então vamos tentar
Eu espero que isso te ajude.
fonte
Apenas caso isso ajude alguém, eu estava recebendo esse erro porque esqueci de desserializar uma matriz serializada. Definitivamente, é algo que eu verificaria se fosse aplicável ao seu caso.
fonte
É antigo, mas no caso de alguém poder se beneficiar disso. Você também receberá esse erro se sua matriz estiver vazia.
No meu caso, tive:
que mudei para:
fonte
Eu acho que a única razão para esta mensagem é porque target Array é realmente uma matriz como string etc (JSON -> {"host": "127.0.0.1"}) variável
fonte
Para PHP
Apenas verifique se o valor retornado não está vazio. Portanto, este exemplo foi para PHP, então descubra como verificar se uma matriz está vazia em outras linguagens.
fonte