Страницы

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

воскресенье, 22 декабря 2019 г.

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

#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 ) )

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

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