Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Примитивная ошибка...

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Ошибка ли?
NeuroZ
Отправлено: 26 Октября, 2016 - 00:06:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012  


Помог: 2 раз(а)




PHP:
скопировать код в буфер обмена
  1. $strings = [];
  2.   foreach ($s as $v) {
  3.     foreach (str_split($v) as $k => $char) {
  4.       $strings[$k] .= $char;
  5.     }
  6.   }

Это кусок кода из моего решения задачки на CodeWars.
Проблема в том, что компилятор почему-то ругается на строку $strings[$k] .= $char; (если ее закомментировать, то ошибки нет)
Ошибка: Undefined offset: 0

Получается что внутри вложенного foreach я должен проверять на существование $strings[$k] и если его нет, то присваивать пустую строку. И только тогда ошибки не будет.
Но обязан ли я в реальности это делать? Или это всё же баг CodeWars ? Или как мне быть в такой ситуации (когда надо конкатенировать значение к несуществующей переменной/элементу массива)
 
 Top
Sail
Отправлено: 26 Октября, 2016 - 09:02:42
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




NeuroZ пишет:
Или как мне быть в такой ситуации (когда надо конкатенировать значение к несуществующей переменной/элементу массива)

Сами почти ответили:
NeuroZ пишет:
проверять на существование $strings[$k] и если его нет, то присваивать

Только можно не пустую строку, а то, что надо.
Например:
PHP:
скопировать код в буфер обмена
  1. if(isset($strings[$k])) {
  2.     $strings[$k] .= $char;
  3. } else {
  4.     $strings[$k] = $char;
  5. }

(Добавление)
Или использовать функцию array_key_exists($key, $array);
 
 Top
NeuroZ
Отправлено: 26 Октября, 2016 - 09:55:01
Post Id



Посетитель


Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012  


Помог: 2 раз(а)




А может есть еще какие-то встроенные в PHP функции, которые позволят скрестить многомерный массив? (что-то вроде array_merge)
Есть $arr = [['a', 'b', 'c'], ['d', 'e', 'f']];
Нужно получить ['ad', 'be', 'cf']

(Отредактировано автором: 26 Октября, 2016 - 09:55:26)

 
 Top
Sail
Отправлено: 26 Октября, 2016 - 10:10:49
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




NeuroZ, вот что когда-то предлагали на вопрос: Сложение двух массивов
(Добавление)
Фактически ведь требуется всего-лишь выполнить операцию сложения двух векторов...
С учётом конкатенации символьных значений, а не сложения чисел...
 
 Top
NeuroZ
Отправлено: 26 Октября, 2016 - 11:24:34
Post Id



Посетитель


Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012  


Помог: 2 раз(а)




В общем самое простое - это предварительно проверять на существование..
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB