За последние 24 часа нас посетил 6561 программист и 506 роботов. Сейчас ищут 132 программиста ...

Коллекции

Тема в разделе "Laravel", создана пользователем Dimon2x, 10 авг 2018.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    1.295
    Симпатии:
    106
    Метод forPage() у коллекции, делит коллекцию на равные части, а остаток переносит на отдельную страницу?
     
  2. nospiou

    nospiou Активный пользователь

    С нами с:
    4 фев 2018
    Сообщения:
    2.249
    Симпатии:
    281
    forPage("номер страницы", "количество элементов на странице")
    forPage method returns a NEW collection
    PHP:
    1. $collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9]);
    2.  
    3. $chunk = $collection->forPage(2, 3);
    4.  
    5. $chunk->all();
    6.  
    7. // [4, 5, 6]
     
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    1.295
    Симпатии:
    106
    @nospiou ну получается, что делит на равные части, а остаток переносит на отдельную страницу
     
  4. nospiou

    nospiou Активный пользователь

    С нами с:
    4 фев 2018
    Сообщения:
    2.249
    Симпатии:
    281
    $a = [1,2,3];
    $b = $a[0];
    Куда $b дела остальные числа с массива?
     
  5. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    1.295
    Симпатии:
    106
    @nospiou оставила там же
     
  6. nospiou

    nospiou Активный пользователь

    С нами с:
    4 фев 2018
    Сообщения:
    2.249
    Симпатии:
    281
    @Dimon2x это просто функция если нужно получить другую страницу запускаешь ee еще раз с другими параметрами и т.д
    PHP:
    1. public function forPage($page, $perPage)
    2. {
    3.     $offset = max(0, ($page - 1) * $perPage);
    4.     return $this->slice($offset, $perPage);
    5. }
    6. public function slice($offset, $length = null)
    7. {
    8.     return new static(array_slice($this->items, $offset, $length, true));
    9. }
    http://www.php.net/array_slice
     
    Dimon2x нравится это.
  7. mkramer

    mkramer Суперстар

    С нами с:
    20 июн 2012
    Сообщения:
    5.818
    Симпатии:
    1.040
    Она возвращает срез массива, соответствующего странице, точка. Остальное никуда не переносит. forPage они назвали зря, но тут ключевое слово for, для. Т.е. "вернуть срез для страницы". И освой Ctrl+click в PhpStorm (и в NetBeans такая штука тоже есть). Кликаешь на функцию, и идёшь в исходник. Там много интересного находишь.
     
  8. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    1.295
    Симпатии:
    106
    Не понимаю, почему не сохраняется результат в массив?

    Само содержимое коллекции выводит, а массив $categoryId остаётся пустым.



    PHP:
    1. $categoryId = [];
    2.        
    3.         $collection = collect($request->input('choose-category'));
    4.         $collection = $collection->chunk(1);
    5.  
    6.         $collection->each(function ($item, $key) {
    7.          
    8.              dump($categoryId[] = [
    9.                  'image_id' => 33,
    10.                  'category_id' => $key
    11.                   ]) ;
    12.          
    13.          
    14.         });
    15.        
    16.         dump($categoryId);
    17.  
    18.      dd($collection);
     
  9. mkramer

    mkramer Суперстар

    С нами с:
    20 июн 2012
    Сообщения:
    5.818
    Симпатии:
    1.040
    @Dimon2x, потому что ты замыканиями не умеешь пользоваться. В php внешние переменные в замыкания передаются инструкцией use (гугли), а если нужно внешнюю переменную менять, но ещё и ссылку на переменную надо передать в use.