Проблемный участок кода:
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
)
)
Комментариев нет:
Отправить комментарий