#php #массивы
Проблемный участок кода: public function create($file) { $file = file($file); $country = preg_grep('/\((\w+)\)(\s?(\w+)\s?(\w+))/', $file); foreach ($country as $key => $value) { $this->collection[$value] = array_slice($file, $key, next($country)); } } Входной файл: (UK) Great Britan Zelma Belyavskaya Danielle Hughes (PH) Philippines Marione Bayunggan Maria Hadap Нужный результат: array [ (UK) Great Britan => [Zelma Belyavskaya, Danielle Hughes], (PH) Philippines => [Marione Bayunggan, Maria Hadap] ] Текущий результат: array [ (UK) Great Britan => [], (PH) Philippines => [] ]
Ответы
Ответ 1
Вы там намудрили. next вернет первый раз 3, а второй раз ему нечего возвращать - массив кончился. Я бы так делал $file = [ '(UK) Great Britan', 'Zelma Belyavskaya', 'Danielle Hughes', '(PH) Philippines', 'Marione Bayunggan', 'Maria Hadap' ]; $collection = []; $key = ''; foreach ($file as $value) { if (preg_match('/\((\w+)\)(\s?(\w+)\s?(\w+))/', $value)) { $key = $value; continue; } $collection[$key][] = $value; } print_r($collection); получим Array ( [(UK) Great Britan] => Array ( [0] => Zelma Belyavskaya [1] => Danielle Hughes ) [(PH) Philippines] => Array ( [0] => Marione Bayunggan [1] => Maria Hadap ) )
Комментариев нет:
Отправить комментарий