Array mit String vergleichen

Xym

Erfahrenes Mitglied
Hallo,

ich versuche gerade ein LiveSupport zu schreiben.

Mein Problem liegt bei der Warteliste.

Ich dachte es mir so: Man verlgeich die Namen in der Warteliste mit User Namen.

Ist er noch nicht drin, wird er hinten angefügt.
Ist er an erster Stelle wird "chat" zurück gegeben.
Ansonsten wird zurückgegeben, an welcher Stelle er gerade ist.

Dazu habe ich eine Ajax Verbindung gesetzt, die das Skript immer wieder aufruft.

PHP:
<?php

$fp = fopen("admin/log/warteliste.txt","r");

$liste = array();
$i = 0;
$z = 0;
$return;
$name = $_POST["name"];

if($fp) {
	while(!feof($fp)) {
    	$liste[$i] = fgets($fp); 
		
		if($liste[$i] == $name) {
			$z = $i;
		}	
		
		$i++;
    }
    fclose($fp);
	
	if($liste[0] == $name) {
		$return = "chat";
	} else {
		$return = $z;
	}
	
	echo $return;
	
}
?>

Das Problem ist, auch wenn in $liste[0] z.B. Gast1 steht und auch der Name Gast1 ist, wird nicht "chat" zurückgegen.


Warum?
 
PHP:
$list = file('warteliste.txt');
//Guck mal ob eventuell Leerzeichen hintendran hängen
var_dump($list[0]);
var_dump($_POST['name']);
if( $list[0] == $_POST['name'] ){
  echo 'chat';
}
else{
  $list = array_flip($list);
  echo $list[$_POST['name']];
}
 
  • Gefällt mir
Reaktionen: Xym
Du kannst dir das Einlesen vereinfachen
PHP:
$name = $_POST["name"];
//Alle Zeilen als Array einlesen
$names = file("admin/log/warteliste.txt");
//trim() auf jede Zeile anwenden um sicher zu sein
$names = array_map('trim', $names);
//Leerzeilen entfernen
$names=array_filter($names);
//Index des gesuchten Namens ermitteln
$index = array_search($name, $names);
//Prüfen ob der Index 0 ist
if($index === 0){
     //TODO: Ist an erster Stelle
}elseif($index===false){
    //TODO: Name ist nicht in der Liste
}else{
    //TODO Name ist an $index+1 Position
}
 
  • Gefällt mir
Reaktionen: Xym
Eine kleine Verbesserung von Yaslaws Beitrag: nach dem Aufruf von array_filter noch die Funktion array_values aufrufen, da auch die erste Zeile leer sein kann und somit die erste Person in der Liste auch den Index 1 oder höher haben kann. Mit array_values werden jedoch die Indizes neu vergeben und somit ist die erste Person wieder unter dem Index 0 zu finden.
 
Zurück