Я получаю странную ошибку PHP после обновления моей версии PHP до 5.4.0-3.
У меня есть этот массив:
Array
(
[host] => 127.0.0.1
[port] => 11211
)
Когда я пытаюсь получить к нему доступ таким образом, я получаю странные предупреждения
print $memcachedConfig['host'];
print $memcachedConfig['port'];
Warning: Illegal string offset 'host' in ....
Warning: Illegal string offset 'port' in ...
Я действительно не хочу просто редактировать свой php.ini и заново устанавливать уровень ошибок.
$memcachedConfig
это не тот массив. Шоуvar_dump($memcachedConfig);
var_export($memcachedConfig)
непосредственно перед «печатью».Ответы:
Пожалуйста, попробуйте этот способ .... Я проверил этот код .... Он работает ....
источник
include_once($file);
. Массив был построен правильно (информация об отладке показывает это), однако его пришлось скопировать вручную в другой массив, прежде чем его можно было использовать без предупреждения PHP о недопустимом смещении строки.Ошибка
Illegal string offset 'whatever' in...
обычно означает: вы пытаетесь использовать строку как полный массив.Это действительно возможно, так как строки могут обрабатываться как массивы отдельных символов в php. Итак, вы думаете, что $ var - это массив с ключом, но это просто строка со стандартными числовыми ключами, например:
Вы можете увидеть это в действии здесь: http://ideone.com/fMhmkR
Для тех, кто приходит к этому вопросу, пытается перевести неопределенность ошибки в то, что я должен был с этим сделать.
источник
fetchAll(PDO::FETCH_ASSOC)
вместо этогоfetch(PDO::FETCH_ASSOC)
и работал отлично.$variablename = [];
дважды, в другой части моего кода, с$variablename = "test";
которой возникло сообщение об ошибке.TL; DR
Вы пытаетесь получить доступ к,
string
как если бы это был массив, с ключом, который являетсяstring
.string
не пойму этого. В коде мы можем увидеть проблему:Глубоко
Давайте посмотрим, что ошибка:
О чем это говорит? Он говорит, что мы пытаемся использовать строку
'port'
в качестве смещения для строки. Как это:Что вызывает это?
По какой-то причине вы ожидали
array
, но у вас естьstring
. Просто путаница. Может быть, ваша переменная была изменена, возможно, она никогда не былаarray
, это действительно не важно.Что может быть сделано?
Если мы знаем, что у нас должно быть
array
, мы должны выполнить некоторую базовую отладку, чтобы определить, почему у нас нетarray
. Если мы не знаем, будет ли у насarray
илиstring
, все станет немного сложнее.Что мы можем сделать, это все виды проверок, чтобы убедиться, что у нас нет уведомлений, предупреждений или ошибок с такими вещами, как
is_array
иisset
илиarray_key_exists
:Есть некоторые тонкие различия между
isset
иarray_key_exists
. Например, если значение$array['key']
равноnull
,isset
возвращаетfalse
.array_key_exists
просто проверим, что ключ существует .источник
Здесь есть много отличных ответов, но я обнаружил, что моя проблема была немного проще.
Я пытался запустить следующую команду:
и я получаю эту
illegal string
ошибку,$x['name']
потому что я не определил массив первым. Поэтому я вставил следующую строку кода, прежде чем пытаться присвоить вещи$x[]
:и это сработало.
источник
Немного опоздал на вопрос, но для тех, кто ищет: я получил эту ошибку, инициализировав с неправильным значением (тип):
Правильный путь:
источник
Начиная с PHP 5.4 нам нужно передать то же значение типа данных, которое ожидает функция. Например:
При вызове этой функции, если указано строковое значение следующим образом:
Это приведет к недопустимому предупреждению о смещении из-за несоответствия типов данных. Для решения этой проблемы вы можете использовать
settype
:источник
Прежде чем проверять массив, сделайте это:
источник
В моем случае я изменяю mysql_fetch_assoc на mysql_fetch_array и решаю. Требуется 3 дня, чтобы решить :-( и другие версии моего проекта работают с fetch assoc.
источник
В моем случае я решил это, когда изменил функцию, которая выполняет sql- запрос после:
return json_encode($array)
then:return $array
источник
Это работает для меня:
Код тестирования моего:
Вывод:
55
Проверьте это, ребята. Спасибо
источник
просто используйте
перед
это потому, что вы никогда не определяете, что такое $ memcachedConfig, поэтому по умолчанию обрабатываются строкой, а не массивами.
источник
Я решил эту проблему с помощью функции trim (). проблема была с космосом.
так давайте попробуем
Я надеюсь, что это поможет вам.
источник
Просто если это кому-нибудь поможет, я получил эту ошибку, потому что забыл десериализовать сериализованный массив. Это определенно то, что я бы проверил, относится ли это к вашему делу.
источник
Это старый, но в случае, если кто-то может извлечь выгоду из этого. Вы также получите эту ошибку, если ваш массив пуст.
В моем случае у меня было:
который я изменил на:
источник
я думаю, что единственная причина для этого сообщения в том, что целевой массив на самом деле массив, как строка и т.д. (JSON -> {"host": "127.0.0.1"}) переменная
источник
Для PHP
Просто убедитесь, что возвращаемое значение не пустое. Так что этот пример был для PHP, так что узнайте, как проверить, является ли массив пустым на других языках.
источник