php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.01.2005, 17:50  
Gast
 
Beiträge: n/a
Standard leere felder entfernen

hi, habe ein problem:
ich habe eine Datenbank in der sind 176 einträge. davon sind viele 4 oder 5 mal vorhanden. ich möchte jetzt gerne alle doppelten aussortieren, damit kein eintrag doppelt ausgegeben wird.

aber es sind anscheint auch leere felder in der datenbank, ich habe das so versucht aber das funktioniert nicht nach 30 sek bricht php ab.

gibt es eine möglichkeit alle leeren felder in der datenbank bzw im array zu entfernen?

wird bei count() leere felder nicht mitgezählt? weil wenn ich das array schritt für schritt ausgebe habe ich immer wieder leere felder drin.
Code:
$a_Array = mysql_query("select Eins from header")
			 	 or die(mysql_error());		
	
	$zaehler=0;
		while (($zwischenSpeicher = mysql_fetch_array($a_Array)) !== false)
			{
        	$a2_Array[$zaehler]= $zwischenSpeicher[0];
   			$zaehler++;		   			
   			}	 

	// $a2_Array hat 176 einträge
	$a3_Array = array_unique ($a2_Array); 
        
        //$_Int hat dann noch 27 einträge
	$x_Int = count($a3_Array);
	
        $x=0;
	while($x < $x_Int)
		{
		if($a3_Array[$x] != '')
			{	
			echo $a3_Array[$x],"
";
			}
		else 
			{
			$x_Int++;
			}
		$x++;
		}
danke für die hilfe
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 03.01.2005, 18:09  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 4.651
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Count zählt die Anzahl der Zeilen. Und eine leere Zeile ist auch eine Zeile, genauso wie eine 0 auch eine Zahl ist, was lange Zeit nicht viele wussten

Ansonsten könntest du leere Felder beispielsweise löschen per

DELETE FROM header WHERE Eins='';
__________________
Entwickler aus Leidenschaft und ein Zahnrad in einem der größten Java-Projekte der Welt.
mepeisen ist offline  
Alt 03.01.2005, 18:24  
Gast
 
Beiträge: n/a
Standard

schonmal danke,
kann es sein das dann die funktion nicht richtig geht?

$a2_Array // ergibt count() 176 , davon 27 unterschiedlich
nach array_unique
$a3_Array // ergibt count() 27 , davon sind aber nur 8 fehler mit inhalt der rest ist leer

was läuft da falsch?
Code:
$a3_Array = array_unique ($a2_Array);
 
Alt 03.01.2005, 18:39  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 4.651
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Es gibt zwei Counts. Es gibt einen Count im MYSQL. Der zählt alle Datensatzzeilen, die in der Ergebnismenge vorhanden sind. Es gibt einen count in PHP, der zählt ebenfalls (ungeachtet des Inhalts) alle Elemente eines Arrays.

Zu deiner Frage:
Code:
   while($x < $x_Int) 
      { 
      if($a3_Array[$x] != '') 
         {    
         echo $a3_Array[$x],"
"; 
         } 
      else 
         { 
         $x_Int++; 
         } 
      $x++; 
      }
Sorry, das ist geistiger Dünnschiss. Wieso um Gottes Willen zählst du $x_Int hoch????
__________________
Entwickler aus Leidenschaft und ein Zahnrad in einem der größten Java-Projekte der Welt.
mepeisen ist offline  
Alt 04.01.2005, 08:46  
Gast
 
Beiträge: n/a
Standard

Zitat:
Wieso um Gottes Willen zählst du $x_Int hoch????
das $a2_Array hat 176 befüllte einträge sie sind mit z.B."abcd" gefüllt.
weil "abcd" bei den 176 einträgen z.B. 5 mal dabei ist verwende ich das :
Code:
$a4_Array = array_unique ($a2_Array);
um alle doppelten zu entfernen.

wenn ich alle doppelten entfernt habe, müssten noch 27 unterschiedliche zeilen übrig bleiben. wenn ich es mit count() zähle bekomme ich auch 27 als ergebnis.
Code:
$y_Int = count($a2_Array);   // 176 einträge
$x_Int = count($a4_Array);   // 27 einträge
wenn ich $a4_Array ausgebe bekomme ich dann aber ein "falsches" ergebnis, das ergebnis sie dann so aus:
  • "abcd"
    "bcdef"

    "xxxx"
    "dddd"



    "oooo"
    usw.
es werden nur 11 der 27 einträge ausgegeben, aber dafür dann noch 16 leere zeilen.

um auf deine frage zurück zu kommen. ich zähle $x_Int hoch, weil ich möchte dass das Array immer dann um eine zeile mehr durch laufen wird für jede leere zeile. hoffe du weisst was ich damit sagen möchte.

ich habe das jetzt so gelöst und bekomme auch ein richtiges ergebnis. aber wirklich sinnvoll ist das nicht weil das $a4_Array bestimmt trotzdem 176 durch laufen wird.
und ich mir dann das count() und das $a4_Array ganz sparen könnte und gleich das $a2_Array durchsuchen könnte oder?
Code:
while(($x < $x_Int) && ($x < $y_Int))
		{
		if($a4_Array[$x] != '')
			{
			echo $a4_Array[$x],"
";
			$x++;
			}
		else
			{
			$x++;
			$x_Int++;
			}			
		}
 
Alt 04.01.2005, 09:26  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 4.651
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Noch einmal. Warum um Gottes Willen zählst du $x_Int hoch??? Halte dir vor Augen, was $x_int ist und wozu das führt. Lass den ganzen Schmarren mit dem $x_Int++;


Du hast hier eine Endlosschleife. Dein Array ist nur $x_Int Elemente groß, wenn du $x_Int hochzählst, sobald du auf einen leeren Eintrag stößt, wirst du am Ende deiner Schleife garantiert auf ein nicht gesetztes Element stoßen.

Dummerweise führt dies bei deiner IF- Abfrage zu einem TRUE, denn ein nicht gesetztes bzw. nicht vorhandenes Element ist gleich einem Leerstring. Deshalb haben die PHP- Leute auch das isset() erfunden.

Fazit: Du wirst zwangsweise wieder das $x_Int hochzählen, stößt wieder auf ein nicht gesetztes Element usw. usw. usw.
Das ist eine Endlosschleife.
__________________
Entwickler aus Leidenschaft und ein Zahnrad in einem der größten Java-Projekte der Welt.
mepeisen ist offline  
Alt 04.01.2005, 09:48  
Gast
 
Beiträge: n/a
Standard

sobald $x => 175($x nicht mehr kleiner als $y_Int ) wird die schleife doch aufjeden fall abgebrochen.
Code:
while(($x < $x_Int) && ($x < $y_Int))
wenn ich x_Int nicht hochzähle bekomme ich nicht alle ergebnis ausgeben
die brauche.

wie würdest du das denn lösen? damit ich alle relevanten daten bekomme?
 
Alt 04.01.2005, 10:04  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 4.651
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Wenn du die Anzahl der Elemente eines Arrays abfragst mit count(), werden niemals am Ende mehr Elemente enthalten sein, als vorher. Dein Problem ist, dass deine Elemente den Schlüssel behalten und du dann nicht so darauf zugreifen kannst. Manual- eintrag:

Note that keys are preserved. array_unique() sorts the values treated as string at first, then will keep the first key encountered for every value, and ignore all following keys. It does not mean that the key of the first related value from the unsorted array will be kept.

Also nochmal: $x_Int++ hochzuzählen ist definitiv falsch, glaub mir endlich mal nachdem ich es nun zum dritten mal sage und schmeiss das aus deinem Code raus. Es gibt für dein Problem mehrere Lösungen.
1. Du bastelst noch ein "array_values()" um dein "array_unique" drumherum. Dann kriegst du die Elemente garantiert in der richtigen Reihenfolge. Ist nicht schön, aber klappt.
2. Du holst dir vorher mit "array_keys()" die Schlüssel heraus und greifst über die auf dein Array zu. Schon etwas besser aber immer noch nciht schön.
3. Du nutzt einen internen Array-Zeiger. Schon deutlich besser aber auf den ersten Blick etwas überladen.
4. Du nutzt foreach. Das ist am besten....
__________________
Entwickler aus Leidenschaft und ein Zahnrad in einem der größten Java-Projekte der Welt.
mepeisen ist offline  
Alt 04.01.2005, 10:10  
Gast
 
Beiträge: n/a
Standard

gut danke, ich probieres mal aus mit foreach.

gäbe es auch eine möglichkeit die key's neu zu sortieren? das nur noch die befüllten felder einen behalten und die dann nur von 0 - 27bzw bis zum letzten feld mit inhalt gehen?
 
Alt 04.01.2005, 10:27  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 4.651
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblickmepeisen ist ein Lichtblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Am einfachsten per "array_values()" oder über eine der sort-Funktionen, wenn du zusätzlich eine echte Sortierung willst. Einfach mal unter "Array-Funktionen" im Handbuch schauen.
__________________
Entwickler aus Leidenschaft und ein Zahnrad in einem der größten Java-Projekte der Welt.
mepeisen ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Leere Ordner werden nicht aufgeführt ? DJmension PHP Tipps 2008 3 28.04.2008 11:53
Formular und Mysql = Leere felder in der DB kazuya PHP Tipps 2006 7 31.08.2006 23:46
Leere Array-Elemente löschen Jacks Rache PHP Tipps 2006 5 09.06.2006 22:44
Problem mit Forumlar und Imageupload - leere Felder imported_kontur PHP Tipps 2006 5 04.04.2006 18:39
suche tutorial: FORMULAR FELDER AUF INHALT PRÜFEN PHP Tipps 2006 7 25.01.2006 19:14
Leere Textfelder Arturo Leonardo Datenbanken 16 16.01.2006 15:38
[Erledigt] Große Felder wie TEXT auslagern? Datenbanken 9 26.10.2005 20:22
Formularauswertung: Leere Felder anzeigen maeck PHP Tipps 2005-2 1 18.09.2005 21:42
[Erledigt] Leere Zeilen löschen Datenbanken 4 22.07.2005 13:19
Suche MySQL Funktion zum Verbinden 2er Felder R4v3r Datenbanken 2 12.07.2005 23:49
\ entfernen Stinger PHP Tipps 2005-2 3 10.07.2005 19:35
2 Select Felder identifizieren HTML, Usability und Barrierefreiheit 4 29.06.2005 16:18
[Erledigt] leere Felder anzeigen Datenbanken 2 28.01.2005 13:11
[Erledigt] Leere Felder ignorieren Datenbanken 1 08.12.2004 22:02
felder gegebenen falls überprüfen und sonst mail schicken. lindner PHP Tipps 2004-2 1 14.11.2004 15:47

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/php-tipps-2007/15240-leere-felder-entfernen.html, php array leere schlüssel löschen, mysql leere felder löschen, php array feld löschen, leere schlüssel löschen, php array leere entfernen, bereinigen von leere elemente, leere felder löschen php, array_unique leere einträge, if and else echo bei leerem feld, php array leere elemente löschen key behalten, array leere elemente löschen php, php leere felder entfernen, php array leere löschen, php array leeres feld löschen, java array leere löschen, php array leere elemente entfernen, php leeren key löschen, array_unique elemente entfernen, java array leere felder entfernen

Alle Zeitangaben in WEZ +1. Es ist jetzt 11:25 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.