Hallo,
folgendes Problem:
kompletter Code:
Code:
protected $uebergebender_string = array();
protected $evtl_string = array();
protected $verbleibende_strings;
protected $dbArray = array();
const DIFF_TRUE = 1;
const DIFF_FALSE = 0;
public function __construct() {
//self::LoopCheckSimilarities();
}
protected function checkSimilarities($differentArrays, $dbArrays) {
sort($differentArrays);
sort($dbArrays);
foreach($differentArrays as $diffKey) {
$diffArray[] = $diffKey;
}
$input = $diffArray[0];
// noch keine kürzeste Distanz gefunden
$shortest = -1;
// durch die Wortliste gehen, um das ähnlichste Wort zu finden
foreach ($dbArrays as $word) {
// berechne die Distanz zwischen Inputwort und aktuellem Wort
$lev = levenshtein($input, $word);
// auf einen exakten Treffer prüfen
if ($lev == 0) {
// das nächste Wort ist das Wort selbst (exakter Treffer)
$closest = $word;
$shortest = 0;
// Schleife beenden, da wir einen exakten Treffer gefunden haben
break;
}
// Wenn die Distanz kleiner ist als die nächste gefundene kleinste Distanz
// ODER wenn ein nächstkleineres Wort noch nicht gefunden wurde
if ($lev <= $shortest || $shortest < 0) {
// setze den nächstliegenden Treffer und die kürzestes Distanz
$closest = $word;
$shortest = $lev;
}
}
unset($differentArrays[array_search($input, $differentArrays)]);
// Und um den Index wiederherzustellen
$newdifferentArrays = array_values($differentArrays);
$this->uebergebender_string[] = $input;
$this->evtl_string[] = $closest;
$this->verbleibende_strings = $newdifferentArrays;
$this->dbArray[] = $dbArrays;
$newdifferentArrays2 = count($newdifferentArrays);
echo "<br/>";
if($newdifferentArrays >= 1) {
return functions::DIFF_FALSE;
} else {
echo "<br/>";
print_r($this->verbleibende_strings);
return functions::DIFF_TRUE;
}
}
protected function LoopCheckSimilarities() {
$checkState = $this->checkSimilarities();
echo $checkState;
exit;
if($checkState == DIFF_FALSE) {
print_r($this->verbleibende_strings);
exit;
foreach($this->verbleibende_strings as $diffKey) {
$diffArray[] = $diffKey;
}
foreach ($this->dbArray as $dbArray) {
$lev = levenshtein($this->verbleibende_strings, $dbArray);
// auf einen exakten Treffer prüfen
if ($lev == 0) {
// das nächste Wort ist das Wort selbst (exakter Treffer)
$closest = $dbArray;
$shortest = 0;
unset($this->verbleibende_strings[array_search($diffArray, $this->verbleibende_strings)]);
// Und um den Index wiederherzustellen
$newdifferentArrays = array_values($this->verbleibende_strings);
// Schleife beenden, da wir einen exakten Treffer gefunden haben
break;
}
// Wenn die Distanz kleiner ist als die nächste gefundene kleinste Distanz
// ODER wenn ein nächstkleineres Wort noch nicht gefunden wurde
if ($lev <= $shortest || $shortest < 0) {
// setze den nächstliegenden Treffer und die kürzestes Distanz
$closest = $dbArray;
$shortest = $lev;
}
array_push($this->uebergebender_string, $diffArray[0]);
array_push($this->evtl_string, $closest);
$this->verbleibende_strings = $newdifferentArrays;
if(isset($newdifferentArrays)) {
return $this->verbleibende_strings;
} else {
return DIFF_TRUE;
}
}
}
}
}
Ausgabe:
1
Sollte sein:
0
Wieso wird mir "else" ausgegeben obwohl das Array nicht leer ist, was übersehe ich?
Update: Hab das nun gelöst, aber folgendes funktioniert nicht.
$checkState müsste 0 ausgeben, weil DIFF_FALSE = 0; aber es ist auf 1... woher kann das kommen?
Danke für die Hilfe.