За последние 24 часа нас посетили 18345 программистов и 1581 робот. Сейчас ищут 1108 программистов ...

Объединение массивов в коллекцию

Тема в разделе "Laravel", создана пользователем kolyafat, 30 мар 2016.

  1. kolyafat

    kolyafat Новичок

    С нами с:
    25 май 2015
    Сообщения:
    23
    Симпатии:
    0
    Добрый день, Уважаемое сообщество, требуется Ваша помощь, не могу разобраться с коллекциями, в общем вопрос следующий, имеется несколько массивов ключ=>значение, ключ у всех одинаковый. Как все это собрать в одну коллекцию, чтоб записать в БД. Все данные приведены к нужной форме через функцию map
    Код (PHP):
    1. $item_name= collect($nm)->map(function($item, $key){
    2. return [
    3. 'c_id_item' => $key,
    4. 'name_item' => $item
    5.  
    6. ];
    7. })->toArray();
    8.  
    9. $gr_name= collect($gr)->map(function($item, $key) {
    10. return [
    11. 'c_id_item' => $key,
    12. 'c_id_group_item' => $item
    13.  
    14. ];
    15. })->toArray();
    16.  
    17. $all_data= collect([]);
    18. $all_data2= collect([]);
    19. $all_data2= $all_data2->merge([$gr_name]);
    20. $all_data2= $all_data2->merge([$item_name]);
    21. $all_data= $all_data->merge($all_data2->toArray()); 
    Вместо того чтоб объеденить как в мануале

    Код (PHP):
    1. $collection = collect(['product_id' => 1, 'name' => 'Desk']); $merged = $collection->merge(['price' => 100, 'discount' => false]); $merged->all(); // ['product_id' => 1, 'name' => 'Desk', 'price' => 100, 'discount' => false] 
    Я получаю коллекцию, в которой сперва значения $gr_name, затем в хвосте $item_name
    Подскажите как нужно объеденить данные, чтоб получилось ['c_id_item' => hfghfgh, 'c_id_group_item' => dfghfgh, 'name_item' => dfgdfg ], причем c_id_item во всех массивах одинаковы. Заранее благодарен за помощь, два дня уже ничего не получается.

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    засунь в массив чтобы ключи были разные
    Код (PHP):
    1. $arr[] = ['c_id_item' => hfghfgh, 'c_id_group_item' => dfghfgh, 'name_item' => dfgdfg ]; 
     
  3. kolyafat

    kolyafat Новичок

    С нами с:
    25 май 2015
    Сообщения:
    23
    Симпатии:
    0
    Да, а как)))))??? Вопрос в этом и заключается...

    Добавлено спустя 57 минут 29 секунд:
    Ничего не пойму, байкот что-ли какой, или по политическим... Ну хоть мыслишки то есть??
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Двухмерные массивы не подойдут?
    Все дело в том, что это форум, а не чат. На форумах надо быть готовым, что могут ответить спустя три дня, могут не ответить вовсе. Мало ли, никто никому не обязан, в общем-то. Политических и национальных репрессий тут отродясь не было, на что бы ты ни намекал.
     
  5. kolyafat

    kolyafat Новичок

    С нами с:
    25 май 2015
    Сообщения:
    23
    Симпатии:
    0
    Ясно)))) Не, двумерные точно не пойдут, изначально пары и записываю в массивы, а потом их в цикле объединять надобно в коллекцию, вот тут то я и притаился, просто жесть, уже не знаю что исполнить. Т.е. после каждого прохода цикла получается пять пар, вот их бы кучками по пять нагружать в collection. В мануале есть функция merge, но как она в цикле должна работать я не могу понять.
    Не верю что не получиться, коллекции я так понял для этого и созданы.
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нифига не понятно, чем тебе массивы не угодили.
     
  7. kolyafat

    kolyafat Новичок

    С нами с:
    25 май 2015
    Сообщения:
    23
    Симпатии:
    0
    Код (PHP):
    1. foreach($item_name->chunk(1000) as $items_chunk){ 
    2.     Item::insert($items_chunk->toArray());
    3.     usleep(100); 
    4. }
    5.  
    Хде $item_name коллекция, в каждом элементе пять пар значений Х 25 000, просто не знаю как лучше в БД залить, по очереди пробовал, сильно долго, поэтому надобно кровь из носу ВЫдумать эту коллекцию, я уже так близко блин... Что посоветуете?

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ващпе несвязанные вещи какие-то бд и коллекция. Если ты не знал, то можно инсертить пачками. Пачки делать можно минимум двумя способами. Ни в одном из них не нужна никакая "коллекция".
     
  9. kolyafat

    kolyafat Новичок

    С нами с:
    25 май 2015
    Сообщения:
    23
    Симпатии:
    0
    Подскажите пожалуйста как?? Хачу уметь...
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нуууууууууууууууууууууууууууууууууууууу

    берёшь цикл, заводишь переменную, считаешь +1 на каждой итерации, копишь запрос в переменную другую. Когда накопилось допустим тыща, ты делаешь запрос в бд.

    ещё можно http://php.ru/manual/function.array-chunk.html и foreach
     
  11. kolyafat

    kolyafat Новичок

    С нами с:
    25 май 2015
    Сообщения:
    23
    Симпатии:
    0
    Я так и делаю
    Код (PHP):
    1. foreach($item_name->chunk(1000) as $items_chunk){ 
    2.     Item::insert($items_chunk->toArray());
    3.     usleep(100); 
    4. }
    5.  
    Только вот как грамотно наполнить $items_chunk, в этом то вопрос и есть.
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.105
    Симпатии:
    1.243
    Адрес:
    там-сям
    А usleep то зачем???

    Такое чувство, что у тебя задание как сделать простые действия с максимумом бесполезной шелухи. Да еще и паузу поставить, чтобы не слишком быстро работало.

    В php есть родные функции для обработки массивов. Очень быстрые и главное гарантированно рабочие. Зачем тебе заворачивать массив в объект, вызывать медленный аналог нативной функции, затем разворачивать обратно в массив?

    Почитай описание array_chunk, array_combine, array_map, array_filter и array_slice

    Покажи свои исходные массивы: сделай var_export()
     
  13. kolyafat

    kolyafat Новичок

    С нами с:
    25 май 2015
    Сообщения:
    23
    Симпатии:
    0
    Ок, спасибо, сей час почитаю, unsleep, чтоб пауза была и сервер не делал мне ресет, думаете она там не нужна??

    Добавлено спустя 11 минут 43 секунды:
    Насчет var_export() пошутил да???
     
  14. kolyafat

    kolyafat Новичок

    С нами с:
    25 май 2015
    Сообщения:
    23
    Симпатии:
    0
    ИИИИИХААААА!!! Получилось, разобрался, канешна пришлось горбатого слепить, зато работает на ура, все 25 000 строчек за секунды влетает в мускул, кароче в двух словах, array_chunk, array_combine, array_map, array_filter и array_slice - вообще не причем, не про то, я в начале цикла обьявляю все значения со значениями null и засовываю мерджем в массив, по ходу движения в вайле заданные значения если они есть перезаписываются, если их нет остается null, этим обеспечивается синхронность данных без смещений, а также постоянное количество значений в каждом элементе, потом засовываю все это в коллекцию и кусками по 1000 пишу в бд, кароче быстрее самому разобраться, чем объяснять на каждом форуме одно и то же и получать советы в виде вопросов.
     
  15. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.105
    Симпатии:
    1.243
    Адрес:
    там-сям
    вот-вот, еще и "на каждом форуме". слепил по быстренькому из говна и палок и двигайся дальше. нах тебе знать основы, когда есть примеры готового кода.
    конец будет ужасным, но это когда ещё будет!
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    коляжыр, ты вообще понимаешь, что творишь? :D