php foreach函数性能问题

时间:2017-09-29 01:39:13

标签: php laravel loops foreach pivot

php foreach函数应发送1条短信但每个联系人发送2-3条。 代码应通过电子邮件和短信发送邀请。但是,联系人有时会同时收到2或3个邀请,这会使SMS被阻止。

public function handle(QRCodeEmail $mail) {
    try {
        foreach ($this->event->contacts as $eventContact) {
            if($eventContact->pivot->sent_date) {
                continue;
            }

            if($eventContact->email) {
                $mail->subject = $this->event->name;
                $mail->setEmail($eventContact->email);
                $mail->setName($eventContact->first_name . ' ' . $eventContact->last_name);
                $mail->send([
                    'name'      => $this->event->name ?? '',
                    'hostName'  => $this->event->host_name ?? '',
                    'suffix'    => $eventContact->suffix,
                    'firstName' => $eventContact->first_name,
                    'lastName'  => $eventContact->last_name,
                    'data'      => $eventContact->pivot->hash,
                ]);
            }

            \Curl::to(env('SMS_GATEWAY_URL'))
                ->withData([
                    'username' => env('SMS_GATEWAY_USERNAME'),
                    'password' => env('SMS_GATEWAY_PASSWORD'),
                    'message' => $this->generateBodyForSms($eventContact, env('INVITATION_LINK') . $eventContact->pivot->hash),
                    'numbers' => $eventContact->phone,
                    'sender' => env('SMS_GATEWAY_SENDER'),
                ])
                ->post();

            (EventsContacts::find($eventContact->pivot->id))->update([
                'sent_date' => Carbon::create()->format('Y-m-d H:i:s')
            ]);
        }

        $this->job->delete();

    } catch (\Exception $e) {
        $this->job->delete();
        throw new \Exception($e);
    }
}

1 个答案:

答案 0 :(得分:0)

一些可能性

  • 也许您应该尝试array_uniquehttp://php.net/manual/en/function.array-unique.php)(查看unique_multidim_array评论中发布的array_unique函数。)

  • 您是否可能有多个记录(具有相同号码的不同“主键”?然后存储已收到短信的电话号码,并在发送新列表之前检查该列表。

  • 也许您的退出条件if($eventContact->pivot->sent_date)无效。