| 
<?php/*
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 class PhonetiQ
 {
 private $query;
 private $query_len;
 
 public function __construct()
 {
 $this->query = null;
 $this->query_len = 0;
 }
 
 public function begin($query)
 {
 $this->query = $query;
 $this->query_len = strlen($query);
 }
 
 public function next($row)
 {
 if ($this->query_len == 0)
 return false;
 
 $score = 0;
 $entries = count($row);
 foreach ($row as $str)
 $score += $this->compare($str);
 
 if ($score == 0)
 return false;
 
 return $score;
 }
 
 private function compare($str)
 {
 $str = $str;
 return $this->str_cmp(metaphone($this->query), metaphone($str));
 }
 
 private function str_cmp($str1, $str2)
 {
 $score = 0;
 $str1 = $this->reg_prep($str1);
 preg_match_all("/([$str1]){2,}/", $str2, $out);
 for ($i=0; $i<count($out[0]); $i++)
 $score += strlen($out[0][$i]);
 return $score;
 }
 
 private function reg_prep($s)
 {
 $o = '';
 for ($i=0; $i<strlen($s); $i++)
 $o .= $s[$i].'?';
 return $o;
 }
 }
 ?>
 |