percentualiConfrontoStringheVettore()   A
last analyzed

Complexity

Conditions 5
Paths 3

Size

Total Lines 21
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 16.3777

Importance

Changes 0
Metric Value
eloc 12
dl 0
loc 21
ccs 3
cts 13
cp 0.2308
rs 9.5555
c 0
b 0
f 0
cc 5
nc 3
nop 1
crap 16.3777
1
<?php
2
3
namespace Fi\CoreBundle\DependencyInjection;
4
5
class PercentualiStringhe
6
{
7
8
    /**
9
     * @param array  $parametri
10
     * <pre>string $parametri['elemento'] l'elemento da confrontare</pre>
11
     * <pre>array  $parametri['elenco']    l'elenco degli elementi con cui effettuare il confronto</pre>
12
     *
13
     * @return array
14
     */
15 1
    public function percentualiConfrontoStringheVettore($parametri = array())
16
    {
17
        //parametri obbligatori
18 1
        if (!isset($parametri['elemento']) || !isset($parametri['elenco']) || empty($parametri['elenco'])) {
19 1
            return false;
20
        }
21
22
        $elemento = $parametri['elemento'];
23
        $elenco = $parametri['elenco'];
24
25
        $rigarisposta = array();
26
        $risposta = array();
27
28
        foreach ($elenco as $elementoelenco) {
29
            $rigarisposta['elementoa'] = $elemento;
30
            $rigarisposta['elementob'] = $elementoelenco;
31
            $rigarisposta['percentuale'] = $this->percentualiConfrontoStringhe(array('stringaa' => $elemento, 'stringab' => $elementoelenco));
32
            $risposta[] = $rigarisposta;
33
        }
34
35
        return $risposta;
36
    }
37
38
    /**
39
     * confronta due stringhe e restiutisce la percentuale di somiglianza in base
40
     * alla posizione delle lettere uguali
41
     * se ci sono molte lettere uguali nella stessa posizione o in posizioni vicine
42
     * (con un parametro di tolleranza) allora la percentuale si alza.
43
     *
44
     * @param array  $parametri
45
     * @param string $parametri["stringaa"]   prima stringa da confrontare
46
     * @param string $parametri["stringab"]   seconda stringa da confrontare
47
     * @param int    $parametri["tolleranza"] numero di posizioni prima e dopo in cui cercare
48
     *
49
     * @return int
50
     */
51 2
    public function percentualiConfrontoStringhe($parametri = array())
52
    {
53
        //parametri obbligatori
54 2
        if (!isset($parametri['stringaa']) || !isset($parametri['stringab'])) {
55
            return false;
56
        }
57 2
        $stringaa = $parametri['stringaa'];
58 2
        $stringab = $parametri['stringab'];
59
60 2
        $tolleranzauno = (isset($parametri['tolleranza']) ? $parametri['tolleranza'] : 1);
61
62 2
        $partecento = 0;
63 2
        $strlensa = strlen($stringaa);
64 2
        $strlensb = strlen($stringab);
65 2
        $totalecento = $strlensa + $strlensb;
66
67 2
        for ($i = 0; $i < $strlensb; ++$i) {
68 2
            $caratterea = $this->getCarattereAPercentualeConfrontoStringhe($i, $stringaa, $strlensa);
69 2
            $offset = $this->getOffsetPercentualeConfrontoStringhe($i, $tolleranzauno);
70 2
            $strpos = strpos(strtolower($stringab), strtolower($caratterea), $offset);
0 ignored issues
show
Bug introduced by
It seems like $caratterea can also be of type false; however, parameter $string of strtolower() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

70
            $strpos = strpos(strtolower($stringab), strtolower(/** @scrutinizer ignore-type */ $caratterea), $offset);
Loading history...
71 2
            $posizioneinb = $caratterea ? $strpos : false;
72
73 2
            $partecento = $this->partecento($i, $posizioneinb, $tolleranzauno, $partecento);
74
        }
75 2
        $perc = (($partecento * 100) / $totalecento);
76
77 2
        return $perc;
78
    }
79
80 2
    private function getCarattereAPercentualeConfrontoStringhe($i, $stringaa, $strlensa)
81
    {
82 2
        return $strlensa >= $i ? substr($stringaa, $i, 1) : false;
83
    }
84
85 2
    private function getOffsetPercentualeConfrontoStringhe($i, $tolleranzauno)
86
    {
87 2
        return (($i - $tolleranzauno) >= 0) ? ($i - $tolleranzauno) : 0;
88
    }
89
90 2
    private function partecento($i, $posizioneinb, $tolleranzauno, $partecento)
91
    {
92 2
        if (!($posizioneinb === false)) {
93 2
            if ($posizioneinb == $i) {
94 2
                $partecento += 2;
95 1
            } elseif (($i + $tolleranzauno >= $posizioneinb) && ( $i - $tolleranzauno <= $posizioneinb)) {
96 1
                $partecento += 1;
97
            }
98
        }
99
100 2
        return $partecento;
101
    }
102
    /* Fatta da Emidio, sopra Andrea l'ha semplificata ma non sapendo la "tolleranza" lascio il backup qui
103
      public function percentualiConfrontoStringhe($parametri = array())
104
      {
105
106
      //parametri obbligatori
107
      if (isset($parametri['stringaa'])) {
108
      $stringaa = $parametri['stringaa'];
109
      } else {
110
      return false;
111
      }
112
113
      //parametri obbligatori
114
      if (isset($parametri['stringab'])) {
115
      $stringab = $parametri['stringab'];
116
      } else {
117
      return false;
118
      }
119
120
      $tolleranzauno = (isset($parametri['tolleranza']) ? $parametri['tolleranza'] : 1);
121
      $partecento = 0;
122
123
      $totalecento = strlen($stringaa) + strlen($stringab);
124
125
      for ($i = 0; $i < (strlen($stringab)); ++$i) {
126
      $caratterea = (strlen($stringaa) >= $i ? substr($stringaa, $i, 1) : false);
127
128
      $posizioneinb =
129
      ($caratterea ? strpos(strtolower($stringab), strtolower($caratterea),
130
      (($i - $tolleranzauno) >= 0 ? ($i - $tolleranzauno) : 0)) : false);
131
132
      if (!($posizioneinb === false)) {
133
      if ($posizioneinb == $i) {
134
      $partecento += 2;
135
      } elseif ((($i + $tolleranzauno) >= $posizioneinb) and (($i - $tolleranzauno) <= $posizioneinb)) {
136
      $partecento += 1;
137
      }
138
      }
139
      }
140
141
      return $partecento * 100 / $totalecento;
142
      } */
143
144
    /*
145
     * @param array          $parametri
146
     * @param Array(x,x,x,x) $parametri["minuti"]
147
     *
148
     * @return int
149
     */
150
}
151