Assoziatives Array: Ausgabe aller zeilen mit wert "gedöns"

Splitterflug

Grünschnabel
Okay Okay,

Als erstes mal hallo. ich bin halbwissender blutiger Anfänger und programmier schon ein Weilchen an meiner Website.

Bis jetzt hab ich mich immer um Arrays gedrückt weil mir das zu hoch war, Jetz komm ich nicht mehr drum rum. ich hab hier im Forum immer viel gefunden was mir weiter half und möchte mich dafür gleich mal bei allen bedanken! DANKE!

Nun zu meinem Problem. Ich denke es liegt eher an meinem Verständins für Arrays als an meinen Fähigkeiten, deshalb wäre ich für einen kleinen Schubs in die richtige Richtung dankbar.

Ich frage aus meiner MYSQL-Datenbank eine Tabelle ab

Code:
$sql = mysql_query('SELECT title, date, state FROM table');
$post = mysql_fetch_array($sql)

soweit so gut.

nun möchte ich alle Einträge der Zeilen, ausgeben bei denen der wert state = x ist,
danach alle bei denen der wert state =y ist usw.

zum näheren Verständnis:

Das ganze dient als Checkliste für die Einträge in meinem selbst gebastelten Blog.
der "state" dient als Markierung ob ein Eintrag schon sichtbar, noch in Bearbeitung oder gelöscht ist.

Ich hab einfach keine Ahnung wie ich das Array Ansprechen soll bzw. die einzelnen Werte in den Zeilen abrufe bei denen in der Spalte state ein bestimmter wert steht

theoretisch könnte ich auch einfach für jedes Suchkriterium einmal die DB abfragen und das ganze mit einer while-Schleife ausgeben aber eigentlich suche ich nach einer eleganteren bei der ich nur einmal abfragen muss und mich danach beliebig aus dem Array bedienen kann.

Ich weis dass die Antwort simpel sein muss. Und es tut mir leid euch mit solchem pille-palle-kram zu belasten

aber für ne Antwort wäre ich echt dankbar
ich freue mich auch über links mit infos.

Durch das PHP-manual hab ich mich schon gelesen und ich glaub da steht sogar die Antwort auf meine frage aber irgendwie fehlts mir das an Veranschaulichung. ich kann mir den Vorgang an sich einfach nicht richtig vorstellen.

Danke Schonmal für die Antwort(en)

edit: soweit hab chs mal alleine geschafft:

Code:
$select = mysql_query('SELECT title, date, state FROM blog ORDER BY state, date');

$blog = array();
while ($post = mysql_fetch_array($select)) {
   $blog[] = $post;
}  

foreach ($blog as $i => $record) {
   echo $i, ". ", $record['title'], " - ", $record['date'], "<br />\n";
}
 
Zuletzt bearbeitet:
Ich würde das über SQL lösen
Zuerst nach state sortieren und dann nach dem date (wahrscheinlich absteigend). Dann hast du die Daten bereits richtig sortiert
Und da x vor y kommt, ist es recht simple
SQL:
SELECT
    title,
    date,
    state
FROM
    table
ORDER BY
    state,
    date DESC;
 
Zuletzt bearbeitet von einem Moderator:
kay danke gleich für die schnelle antwort.

soweit hatte ich mir auch schon überlegt. ich finds aber halt erstens unschön im code an sich (welcher bei mir ohnehin schon katastrophal aussieht)

und zweitens bin ich irgendwie unzufrieden mit den mehrfachen zugriffen auf die datenbank.

effektiver fänd ich halt

Datenbank -> Array mit allen werten

Array-> alle zeilen mit krit. x
Array-> alle zeilen mit krit. y
usw.

also ich habs jetzt endlich mal verstanden wie das Array über die einzelnen spalten anspreche nun fehlt mir nur noch wie ich da eine kriterium reinbringe. hat wer ne ahnung ob ich das effektiv mit einer whileschleife lösen kann?

ich bin so unwürdig -.-*

Edit:

...Ja das bin ich. Manchmal ist die Lösung doch simpler als man denkt. aber damit der Post nicht um sonst war hier meine Lösung, falls nochmal so jemand wie ich bei sowas hängen bleibt ^^:

Code:
$select = mysql_query('SELECT title, date, state FROM blog ORDER BY state, date');
while ($post = mysql_fetch_array($select)) {
   $blog[] = $post;
}  
	foreach ($blog as $post) 
	{
		if($post['state']=="public")
		{
   			echo $post['title']."-".date("d.m.Y",$post['date']);
		}
	}

1. Ganz simpel eigentlich. ich hol mir die Datensätze alle aus der Tabelle.
Code:
$select = mysql_query('SELECT title, date, state FROM blog ORDER BY state, date');
while ($post = mysql_fetch_array($select)) {
   $blog[] = $post;
}

2. Bei jeder Zeile frage ich per if nun ab, ob im Feld [state] der gesuchte begriff steht

Code:
foreach ($blog as $post) 
	{
		if($post['state']=="public")
		{
   			echo $post['title']."-".date("d.m.Y",$post['date']);
		}
	}

wenn ja werden titel und datum ausgegeben.
wenn nein wird nichts ausgegeben.

Ich danke trotzdem für die schnelle Antwort und markier das Thema als gelöst.
 
Zuletzt bearbeitet:
Ah, du willst sie nicht nur Sortiert sondern auch getrennt abarbeiten
PHP:
//Array initialisieren
$stateX = array();
$stateY = array();
foreach($blog as $record){
    //Wenn der state x ist, in den x-array schreiben, ansosnten in den y-array
    if($record['state'] == 'x'){
        $stateX[] = $record;
    }else{
        $stateY = $record;
    }
}

Nachtrag:
Noch schöner, aber komplizierter zum verstehen, ist die Lösung über Filter
PHP:
$stateX = array_filter($blog, 'filterStateX');
$stateY = array_filter($blog, 'filterStateY');

function filterStateX($item){
    return $item['state'] == 'x'; 
}
function filterStateY($item){
    return $item['state'] == 'y';
}
 
Woa! Das isses!

Saubere lösung! so kann ich dann einfach das jeweilige array ausgeben statt drinnen rumzuwühlen.

Danke. Ich liege zu euren Füßen Sir *G*

ne echt Das Forum hier is Spitze. Danke

Edit:

wer mal beobacht will was son Stümper wie ich in seiner freizeit so macht hier is meine HP an der ich rumwurstel. ich hoff das is okay wenn ich das hier reinstell will keine werbung machen!

[LINK]http://think13.dyndns.org[/LINK]

das mit dem Filter Find ich interessant aber ist mir im Moment noch etwas zu hoch.
ich denke aber ich hebe mir das mit den filtern auf um evtl nochmal die einzelnen arrays zu filtern wenn ich bestimmte Einträge suche. ;)

@Yaslaw

ich hab nochn kleines problem irgendwie lassen sich die array einträge nu nich ausgeben ich finde aber den fehler nicht. habs etwas abgeändert da ich ja permanent am code rumbau^^:

PHP:
//Array initialisieren
$statePublic = array();
$statePrivate = array();

$select = mysql_query('SELECT title, date, state FROM blog ORDER');
while ($blog = mysql_fetch_array($select)) 
{	
		foreach($blog as $post)
		{
    		//Wenn der state Public ist, in den Public-array schreiben, ansosnten in den Private-array
    		if($post['state'] == 'public')
    		{
        		$statePublic[] = $post;
    		}
   		 	else
    		{
        		$statePrivate[] = $post;
    		}
		}
		
}

                 foreach($statePubilc as $entry)
		{
			echo $entry['title'];
		}

PS hab deinen anhang gelesen und ernstgenommen *G*
 
Du mischst da gewaltig alles durcheinander.$blog wird nicht mehr abgefüllt.

Als erstes die while-Schleife in dem $blog abgefüllt wird. Dann aufteilen und erst dann die einzelnen Teile weiterverarbeiten. Die Schleifen sollten in diesem Fall nacheinander sein, nicht ineinadner
PHP:
$select = mysql_query('SELECT title, date, state FROM blog ORDER BY state, date');
while ($post = mysql_fetch_array($select)) {
    $blog[] = $post;
}

//Array initialisieren
$statePublic = array();
$statePrivate = array();
foreach($blog as $post){
    //Wenn der state Public ist, in den Publc-array schreiben, ansosnten in den Private-array
    if($post['state'] == "public"){
        $statePublic[] = $post;
    }else{
        $statePrivate[] = $post;
    }
}
            
foreach($statePublic as $entry){
    echo $entry['date'];
}
 
*G* HAHA! Danke! ich schmeiss mich weg eben hab ich auch gelöst gehabt.

Trotzdem danke dir! habs jetzt.

sry ich sitz schon seit gestern um 6.00 uhr am rechner und bastel ich glaub meine konzentration ist einfach am boden.

danke danke!

ich muss hier jetzt heute nochmal einen Nachtrag erstellen:

bis gestern konnte man mich ja mit arrays jagen, heute spiel ich schon den ganzen tag mit damit rum und organisier mein ganze seit neu damit, da ichs einfach viel leichter finde alle nötigen daten aus einem Array abzufragen als immer direkt die DB anzsprechen, vor allem wenn man nur einzelne werte haben will find ichs nervig jedesmal den server zu nötigen nen mysqlconnect durchzuführen.
darüber hinaus denke ich ist es auch einfach sicherer die datenbank nicht ständig wie ein scheunentor aufzureissen^^

ich wollte aber nun mal noch an die Brainheads hier ein paar Frage stellen da mir das noch etwas schleier haft ist.

1. was ist weniger belastend für den server mysql abfragen oder array abfragen
2. was ist schneller abzuarbeiten arrays oder mysql tabellen.
und
3. hat schonmal irgendjemand mit der cachingfunktion vom apachen rumgespielt und kennt da erfahrungsberichte?
 
1. was ist weniger belastend für den server mysql abfragen oder array abfragen
Natürlich ein Array abzufragen. Aber das macht bei dir keinen Unterschied, denn womit wird das array befüllt? - Richtig, mit daten aus der Datenbank.
2. was ist schneller abzuarbeiten arrays oder mysql tabellen.
Mach dir um Geschwindigkeit erstmal keine Sorgen ;) Du solltest aber auf keinen Fall erstmal alle Daten aus deiner Datenbank auslesen und in arrays speichern, selbst wenn du nur einen kleinen Teil davon brauchst. das wäre nicht sehr sinnvoll oder ressourcenschonend.

3. hat schonmal irgendjemand mit der cachingfunktion vom apachen rumgespielt und kennt da erfahrungsberichte?
Spiel nicht an irgendwelchen Funktionen rum, von denen du keine Ahnung hast, kann ich hier nur sagen ;) Wenn du die mal irgendwann brauchen solltest, wird dir ein von dir angestellter Systemadministrator schon Bescheid geben ... :p
 
Natürlich ein Array abzufragen. Aber das macht bei dir keinen Unterschied, denn womit wird das array befüllt? - Richtig, mit daten aus der Datenbank.

Mach dir um Geschwindigkeit erstmal keine Sorgen ;) Du solltest aber auf keinen Fall erstmal alle Daten aus deiner Datenbank auslesen und in arrays speichern, selbst wenn du nur einen kleinen Teil davon brauchst. das wäre nicht sehr sinnvoll oder ressourcenschonend.


Spiel nicht an irgendwelchen Funktionen rum, von denen du keine Ahnung hast, kann ich hier nur sagen ;) Wenn du die mal irgendwann brauchen solltest, wird dir ein von dir angestellter Systemadministrator schon Bescheid geben ... :p


taha! nur dumm dass ich selbst der administrator bin. Ich sag nur home server. Ausserdem hesst die tatsache das was PHP angeht ne niete bin nicht dass ich mich nicht mit dem Indianer auskenn :D an dem ding schraub ich schon seit jahren rum. ich fands nun nur einfach intressant zwecks performance wenn mal mehr auf der seite abgeht als nur n paar simple textausgaben.

aber gut . danke für die antworten.

was die arays angeht: ich les ja nich die ganze datenbank aus. nur die einzelnen tabellen und da dann auch nur was ich brauche. mit nem array hab ichs aber find ich irgendwie leichter überall im code auf meine daten zuzugreifen und da ich kein großer freund von templates und krempel bin, versuch ich wenigstens auf eine sinvolle aufteilung im code zu achten und ich find da kommt ein

PHP:
 <?php $select=mysql_query( Gedöns gedöns) ?>

mitten im html abteil einfach undschön^^. is aber geschmackssache denke ich.
 
Zurück