Оптимизировать цикл foreach в laravelPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Оптимизировать цикл foreach в laravel

Сообщение Anonymous »

Мне нужна массовая вставка в таблицу подписчиков и таблицу полей подписчиков, в которой данные поступают из файла CSV.

Таблице подписчиков нужен только адрес электронной почты, а таблице полей подписчиков нужен идентификатор подписчика из таблицы подписчиков, идентификатор поля из таблицы полей и другие поля CSV.

Итак, я пишу этот код для этого задания, и здесь много циклов foreach, поэтому выполнение занимает много времени, когда я вставляю большой файл CSV.

Теперь, можно ли оптимизировать этот код?

Вот мой код:

$emails = array();
foreach ($data as $item) {
array_push($emails, $item['email']);
}

$subscribers = Subscriber::select('email')->whereIn('email', $emails)->where('mail_list_id', $this->id)->get();

//check exists mail in database
$exists_mail = array();
foreach ($subscribers as $item) {
$exists_mail[$item->email] = true;
}

//get subscriber unique key
$subscriber_uid = array();

//get all field value
$total_field = array();

//bulk insert in subscribers table

$subscriberBatch = array();
foreach ($data as $item) {
if (!isset($exists_mail[$item['email']])) {
$column['uid'] = uniqid();
$column['mail_list_id'] = $this->id;
$column['email'] = $item['email'];
$column['status'] = Subscriber::STATUS_SUBSCRIBED;
$column['subscription_type'] = Subscriber::SUBSCRIPTION_TYPE_IMPORTED;

array_push($subscriberBatch, $column);
array_push($subscriber_uid, $column['uid']);

$fieldKey['uid'] = $column['uid'];
foreach ($fields as $field) {
$fieldKey[Str::lower($field['tag'])] = $item[Str::lower($field['tag'])];
}

array_push($total_field, $fieldKey);
}
}

Subscriber::insert($subscriberBatch);

//bulk insert in subscriber fields table
$totalSubscriber = Subscriber::select('id')->whereIn('uid', $subscriber_uid)->get()->toArray();

foreach ($totalSubscriber as $index => $subscriber) {
$total_field[$index]['subscriber_id'] = $subscriber['id'];
}

$fieldBatch = array();
foreach ($total_field as $item) {
foreach ($fields as $field) {
$fieldColumn['subscriber_id'] = $item['subscriber_id'];
$fieldColumn['field_id'] = $field['id'];
$fieldColumn['value'] = $item[Str::lower($field['tag'])];
array_push($fieldBatch, $fieldColumn);
}
}

SubscriberField::insert($fieldBatch);



Подробнее здесь: https://stackoverflow.com/questions/602 ... in-laravel
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как я могу оптимизировать свой цикл «Foreach» для более эффективного чтения и обработки каждой строки текстового файла в
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Laravel Foreach в цикле Foreach (проектирование цикла)
    Anonymous » » в форуме Php
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous
  • Цикл foreach в Laravel через массив в Blade
    Гость » » в форуме Php
    0 Ответы
    12 Просмотры
    Последнее сообщение Гость
  • Цикл foreach в Laravel через массив в Blade
    Гость » » в форуме Php
    0 Ответы
    19 Просмотры
    Последнее сообщение Гость
  • Как преобразовать этот код foreach в Parallel.ForEach?
    Anonymous » » в форуме C#
    0 Ответы
    144 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»