Добрый день, Уважаемое сообщество, требуется Ваша помощь, не могу разобраться с коллекциями, в общем вопрос следующий, имеется несколько массивов ключ=>значение, ключ у всех одинаковый. Как все это собрать в одну коллекцию, чтоб записать в БД. Все данные приведены к нужной форме через функцию map Код (PHP): $item_name= collect($nm)->map(function($item, $key){ return [ 'c_id_item' => $key, 'name_item' => $item ]; })->toArray(); $gr_name= collect($gr)->map(function($item, $key) { return [ 'c_id_item' => $key, 'c_id_group_item' => $item ]; })->toArray(); $all_data= collect([]); $all_data2= collect([]); $all_data2= $all_data2->merge([$gr_name]); $all_data2= $all_data2->merge([$item_name]); $all_data= $all_data->merge($all_data2->toArray()); Вместо того чтоб объеденить как в мануале Код (PHP): $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 и т. д.
засунь в массив чтобы ключи были разные Код (PHP): $arr[] = ['c_id_item' => hfghfgh, 'c_id_group_item' => dfghfgh, 'name_item' => dfgdfg ];
Да, а как)))))??? Вопрос в этом и заключается... Добавлено спустя 57 минут 29 секунд: Ничего не пойму, байкот что-ли какой, или по политическим... Ну хоть мыслишки то есть??
Двухмерные массивы не подойдут? Все дело в том, что это форум, а не чат. На форумах надо быть готовым, что могут ответить спустя три дня, могут не ответить вовсе. Мало ли, никто никому не обязан, в общем-то. Политических и национальных репрессий тут отродясь не было, на что бы ты ни намекал.
Ясно)))) Не, двумерные точно не пойдут, изначально пары и записываю в массивы, а потом их в цикле объединять надобно в коллекцию, вот тут то я и притаился, просто жесть, уже не знаю что исполнить. Т.е. после каждого прохода цикла получается пять пар, вот их бы кучками по пять нагружать в collection. В мануале есть функция merge, но как она в цикле должна работать я не могу понять. Не верю что не получиться, коллекции я так понял для этого и созданы.
Код (PHP): foreach($item_name->chunk(1000) as $items_chunk){ Item::insert($items_chunk->toArray()); usleep(100); } Хде $item_name коллекция, в каждом элементе пять пар значений Х 25 000, просто не знаю как лучше в БД залить, по очереди пробовал, сильно долго, поэтому надобно кровь из носу ВЫдумать эту коллекцию, я уже так близко блин... Что посоветуете? Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
ващпе несвязанные вещи какие-то бд и коллекция. Если ты не знал, то можно инсертить пачками. Пачки делать можно минимум двумя способами. Ни в одном из них не нужна никакая "коллекция".
нуууууууууууууууууууууууууууууууууууууу берёшь цикл, заводишь переменную, считаешь +1 на каждой итерации, копишь запрос в переменную другую. Когда накопилось допустим тыща, ты делаешь запрос в бд. ещё можно http://php.ru/manual/function.array-chunk.html и foreach
Я так и делаю Код (PHP): foreach($item_name->chunk(1000) as $items_chunk){ Item::insert($items_chunk->toArray()); usleep(100); } Только вот как грамотно наполнить $items_chunk, в этом то вопрос и есть.
А usleep то зачем??? Такое чувство, что у тебя задание как сделать простые действия с максимумом бесполезной шелухи. Да еще и паузу поставить, чтобы не слишком быстро работало. В php есть родные функции для обработки массивов. Очень быстрые и главное гарантированно рабочие. Зачем тебе заворачивать массив в объект, вызывать медленный аналог нативной функции, затем разворачивать обратно в массив? Почитай описание array_chunk, array_combine, array_map, array_filter и array_slice Покажи свои исходные массивы: сделай var_export()
Ок, спасибо, сей час почитаю, unsleep, чтоб пауза была и сервер не делал мне ресет, думаете она там не нужна?? Добавлено спустя 11 минут 43 секунды: Насчет var_export() пошутил да???
ИИИИИХААААА!!! Получилось, разобрался, канешна пришлось горбатого слепить, зато работает на ура, все 25 000 строчек за секунды влетает в мускул, кароче в двух словах, array_chunk, array_combine, array_map, array_filter и array_slice - вообще не причем, не про то, я в начале цикла обьявляю все значения со значениями null и засовываю мерджем в массив, по ходу движения в вайле заданные значения если они есть перезаписываются, если их нет остается null, этим обеспечивается синхронность данных без смещений, а также постоянное количество значений в каждом элементе, потом засовываю все это в коллекцию и кусками по 1000 пишу в бд, кароче быстрее самому разобраться, чем объяснять на каждом форуме одно и то же и получать советы в виде вопросов.
вот-вот, еще и "на каждом форуме". слепил по быстренькому из говна и палок и двигайся дальше. нах тебе знать основы, когда есть примеры готового кода. конец будет ужасным, но это когда ещё будет!