Mehrdimensionales Array füllen/durchsuchen/ausgeben

IR-Bastian

Mitglied
Hallo zusammen,

also ich war ganz lange heute schon auf den einschlägigen Dokuseiten und habe nach einer Lösung gesucht -> keine gefunden, bzw. es nicht gecheckt.

Mein Problem:

Ich habe eine Schleife mit der Daten eingelesen werden.
Das habe ich, alles andere nicht:

Dort ist eine IF-Abfrage, ob ein bestimmter Eintrag schon einmal vorkam.(das z.b. weiss ich schon nicht wie ich das realisieren soll)

Wenn dieser noch nicht vorkam soll er in das Array abgespeichert werden und ein Zähler diesem Wert zugeordnet werden. Schluss endlich möchte ich dann eine Ausgabe haben, wo in etwa so etwas steht:

Wert 1 kam 5 mal vor.
Wert 2 kam 3 mal vor.

usw.

Ich will meine Ansätze die ich hier hab nicht hinschreiben, weil diese
a.) Bestimmt irritieren
b.) Peinlich falsch sind

Ciao und danke
Bastian
 
Wenn ich Richtig verstanden hab willst du sowas

PHP:
<?

foreach ($suche as $wert){

if ($wert =="1") { $ergebnis1++ ;};
if ($wert =="2") { $ergebnis2++ ;}; 
if ($wert =="3") { $ergebnis3++ ;}; 
};

echo "wert1 kommt ".$ergebnis1." mal vor";
echo "wert2 kommt ".$ergebnis2." mal vor";
echo "wert3 kommt ".$ergebnis3." mal vor";
?>

Mfg Splasch
 
Zuletzt bearbeitet:
Dein Ergebnis taugt ja nur für ein statisches Problem.

Das Problem ist, dass ich aber noch nicht weiss dass ich "1" suche.
Ich will gucken, ob der Wert nicht schon in dem Array ist...
Wenn er ist nicht ist soll er hinzugefügt werden, ansonsten soll der Zähler für diesen Wert sich erhöhen.

Ich brauche quasi ein Array(befüllt/durchsucht und angezeigt) in welchem sich "Werte" und der dazugehörige Zähler sich wieder finden.
 
Das Problem ist, dass ich aber noch nicht weiss dass ich "1" suche.

Wo liegt bitte das Problem ersetz einfach den Wert durch ein Variable und mach bei der If abfrage einen Else zweig.Damit fals er es nicht findet ins Array anhängt.

Oder soll ich dir alles vor Coden?

Mfg Splasch
 
Ich hab das so, bzw habe an die stellen "" gemacht wo ich Probleme habe.
Wenn du das als "vorcoden" bezeichenst, sei es drum:

PHP:
$alleergenisse = array();

if (!( in_array( $suchwert, $alleergenisse ){

array_push($alleergenisse, $suchwert !PLUS HINWEIS DAß DAS ERST EINMAL VORKAM!)  


} else{

$alleergenisse[$suchwert] !HINWEIS DAS ES NOCHEINMAL VORKAM!

}

Und dann weiss ich auch nicht wie die Ausgabe aussähe davon...
 
Ungetestet hier mal die Lösung dazu.

PHP:
<?php  

$wert="hund";
$inhalt= array('katze','hund','Maus');


function suchen($suche,$inhalt){

 foreach ($inhalt as $wert){ 
  if ($wert == $suche) { $ergebnis++ ;};
	}; 
return $ergebnis;
}

$auswertung= suchen($wert,$inhalt);

if (!isset($auswertung) || $auswertung== 0) {
	// Wert wurde nicht gefunden
	// Wert dem Array dranhängen
	$inhalt[]=$wert;
}


echo $wert." wurde ".$ergebnis." mal gefunden";

?>

Wobei du die Auswertung auch gleich mit in die function mit reinschreiben kannst dann haste das gleich in einem und brauchst nur mehr die Funktion mit dem such begriff aufrufen.
Oder wenn du OO programmieren willst dann dafür einfach nee class erstellen.

Mfg Splasch
 
Zuletzt bearbeitet:
Wenn ich dich richtig verstehe möchtest du eine Auflistung welche Werte wie oft in einem Array vorkommen. Dabei weisst du vorher nicht welche Werte drin sein könnten (oder nur so beschränkt dass man es nicht über Variable coden kann). Und dumöchtest am Ende natürlich keine Ausgabe wie "Wert X wurde 0 mal gefunden", sondern nur Ausgaben zu Ergebnissen, die auch im Array sind.

Richtig soweit?
 
Gut.
Also ich dachte, dass das für mich relativ einfach sei, aber irgendwie spinnt mein PHP. Das ist mein Code:

PHP:
<?php

$alleergebnisse = array("A", "B", "B", "C", "D", "A", "C", "A", "A", "C");

$anzahlen = array(); //Hier stehen am Ende die Anzahlen drin

foreach ($alleergebnisse as $wert) { //für alle Werte im Array
	
	if (in_array($wert, $anzahlen)==true) { //ist der Wert schon einmal drin?
		$anzahlen[$wert] += 1; //Anzahl für diesen Wert erhöhen
	} else {
		$anzahlen[$wert] = 1; //Anzahl für diesen Wert auf 1 setzen
	}
	
}

//Ausgabe:
foreach ($anzahlen as $wert=>$anzahl) {
	echo "Wert ".$wert." kommt ".$anzahl." mal vor.<br>\n";
}

?>

Prinzipiell sollte das funktionieren. Vielleicht tut es das bei dir ja auch. Das wäre die Hauptsache. Kannst ja mal mit print_r($anzahlen) innerhalb der ersten Schleife reingucken. Das ist nicht logisch was bei mir da passiert. :mad::mad:
 
Thats it!

PHP:
$alleergebnisse = array("A", "A", "B", "C", "D", "A", "C", "A", "A", "C");

$anzahlen = array(); //Hier stehen am Ende die Anzahlen drin

foreach ($alleergebnisse as $wert) { //für alle Werte im Array 
     
    if (in_array($wert, $alleergebnisse)==true) { //ist der Wert schon einmal drin?
        $anzahlen[$wert] += 1; //Anzahl für diesen Wert erhöhen 
        echo "drin";

    } else { 
        $anzahlen[$wert] = 1; //Anzahl für diesen Wert auf 1 setzen 
    } 
     
} 

//Ausgabe: 
foreach ($anzahlen as $wert=>$anzahl) { 
    echo "Wert ".$wert." kommt ".$anzahl." mal vor.<br>\n"; 
}
Du bist mit $anzahlen und $alleergebnisse da einmal durcheinandergekommen, aber jetzt läufts! Danke!
 
Zurück