Страницы

Поиск по вопросам

пятница, 16 ноября 2018 г.

array_slice не срабатывает внутри foreach

Проблемный участок кода:
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 => [] ]


Ответ

Вы там намудрили. 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 )
)

Комментариев нет:

Отправить комментарий