PHP Warning: Illegal string offset в php7

164
26 ноября 2021, 02:40

Есть функция, параметры которой задаются через массив и внутри с ними произвожу определенные вычисления, где мне нужны манипуляции с числами.

function comment_html($likes=array('minus' =>0,'plus'=>0 )){
    if(!$likes['plus'])$likes['plus']=0; // Illegal string offset
    if(!$likes['minus'])$likes['minus']=0; // in home..
    ...
}

Все работало хорошо до тех пор пока не обновил до php7. Теперь получаю регулярные варинги:

PHP7 Warning: Illegal string offset

Понимаю, что это связано с приведением значений массива к числовым значениям, но, не понимаю как это исправить..

UDP: как мне подсказали в комментариях, реально ошибка не в строках выше, а в данных, которые я оправляю в функцию. Вот такие значения могут быть на входе:

string(0) "" 
string(1) "1" 
string(0) "" 
array(2) { ["plus"]=> int(1) ["minus"]=> int(1) } 
array(1) { ["plus"]=> int(1) }
string(1) "2"
array(2) { ["plus"]=> string(1) "0" ["minus"]=> int(1) }
array(2) { ["plus"]=> string(1) "1" ["minus"]=> string(1) "0" }

И затем отправляю в конструкторе $comment = $this->comment_html($likes);

Как можно унифицировать эти значения, чтобы варинга не возникало и все работало верно, как и раньше?

UDP2: С массивами все понятно, а вот с преобразованием string в array у меня не выходит

if(isset($likes) === true && $likes === '') {
   var_dump($likes); //string(0) ""
   $likes=array('minus' =>0,'plus'=>0 ); //в месте нулей ничего не выводит
   if(!$likes['plus'])$likes['plus']=0; //работает, выводит 0 с варингом
   if(!$likes['minus'])$likes['minus']=0; //работает, выводит 0 с варингом
}
Answer 1

Если форматы данных на входе ограничены списком из вопрос, вот так можно

$template = ['minus' =>0,'plus'=>0];
if(is_array($likes)) {
    $likes = array_replace($template, $likes);
}
else {
    $likes = ['minus' =>0,'plus'=> $likes];
}
READ ALSO
Выборочный update из формы yii2 в базу

Выборочный update из формы yii2 в базу

Есть формаС нее данные отправляются в объект $UserProfile

71
Слетела кодировка

Слетела кодировка

Всем привет, слетела кодировка, почта была создана на хостинге pskz Помогите плиз

101
Условие для вывода страниц в Wordpress

Условие для вывода страниц в Wordpress

Как сделать условие если нету дочерных страниц выполнить другой запрос $args для того чтобь вывести соседные страницы а не дочерные

179
PHP Warning: Use of undefined constant

PHP Warning: Use of undefined constant

Сервер постоянно логирует вот такую ошибку:

94