Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Spatie\LaravelIgnition\Support;
4
 
5
use Illuminate\Support\Collection;
6
 
7
class StringComparator
8
{
9
    /**
10
     * @param array<int|string, string> $strings
11
     * @param string $input
12
     * @param int $sensitivity
13
     *
14
     * @return string|null
15
     */
16
    public static function findClosestMatch(array $strings, string $input, int $sensitivity = 4): ?string
17
    {
18
        $closestDistance = -1;
19
 
20
        $closestMatch = null;
21
 
22
        foreach ($strings as $string) {
23
            $levenshteinDistance = levenshtein($input, $string);
24
 
25
            if ($levenshteinDistance === 0) {
26
                $closestMatch = $string;
27
                $closestDistance = 0;
28
 
29
                break;
30
            }
31
 
32
            if ($levenshteinDistance <= $closestDistance || $closestDistance < 0) {
33
                $closestMatch = $string;
34
                $closestDistance = $levenshteinDistance;
35
            }
36
        }
37
 
38
        if ($closestDistance <= $sensitivity) {
39
            return $closestMatch;
40
        }
41
 
42
        return null;
43
    }
44
 
45
    /**
46
     * @param array<int, string> $strings
47
     * @param string $input
48
     *
49
     * @return string|null
50
     */
51
    public static function findSimilarText(array $strings, string $input): ?string
52
    {
53
        if (empty($strings)) {
54
            return null;
55
        }
56
 
57
        return Collection::make($strings)
58
            ->sortByDesc(function (string $string) use ($input) {
59
                similar_text($input, $string, $percentage);
60
 
61
                return $percentage;
62
            })
63
            ->first();
64
    }
65
}