App\Ninja\Repositories\ClientRepository::findPhonetically PHP Method

findPhonetically() public method

public findPhonetically ( $clientName )
    public function findPhonetically($clientName)
    {
        $clientNameMeta = metaphone($clientName);
        $map = [];
        $max = SIMILAR_MIN_THRESHOLD;
        $clientId = 0;
        $clients = Client::scope()->get(['id', 'name', 'public_id']);
        foreach ($clients as $client) {
            $map[$client->id] = $client;
            if (!$client->name) {
                continue;
            }
            $similar = similar_text($clientNameMeta, metaphone($client->name), $percent);
            if ($percent > $max) {
                $clientId = $client->id;
                $max = $percent;
            }
        }
        $contacts = Contact::scope()->get(['client_id', 'first_name', 'last_name', 'public_id']);
        foreach ($contacts as $contact) {
            if (!$contact->getFullName() || !isset($map[$contact->client_id])) {
                continue;
            }
            $similar = similar_text($clientNameMeta, metaphone($contact->getFullName()), $percent);
            if ($percent > $max) {
                $clientId = $contact->client_id;
                $max = $percent;
            }
        }
        return $clientId && isset($map[$clientId]) ? $map[$clientId] : null;
    }