PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arrayausgaben



ace23
29-01-2006, 15:43
Hi Leuts,

Also ich hab mal wieder ein Problem ;)

Ich habe ein Array, dies sind z.B. die hauptprodukte:

$array1=(
'1' => 'Birne',
'2' => 'Apfel',
'3' => 'Orange'
);

Dann habe ich noch ein Array, die zugehörigen angaben z.b. der größe:

$array2=(
'1' => 'Birne groß',
'3' => 'Apfel groß',
'5' => 'Orange groß',
'8' => 'Orange klein'
);

Und noch ein weiters Array, hier stehen die schlüssel aus dem array2 und als wert die schlüssel aus array1:

$array3=(
'1' => '1',
'3' => '1',
'5' => '3',
'8' => '3'
);

Nun möchte ich immer den Wert aus Array1 nacheinander auflisten und nebem dem jeweiligen Wert aus Array1 alle Werte aus Array2 die zu den Werten aus array1 passen. Beide ausgeben ist kein problem, aber dann stehen ja neben jedem wert aus array1 immer alle werte aus array2, ist ja auch logisch.

Wo ich richtig hänge ist, dass ich nur die passenden werte aus array2 ausgegeben bekomme, da scheiterts aber daran, dass ich das mit dem array3 nicht gebacken bekomme das er mir das abgleicht.

undefined
29-01-2006, 16:02
http://www.php.net/manual/de/function.array-combine.php http://www.php.net/manual/de/function.array-keys.php http://www.php.net/manual/de/function.array-walk.php
Sehe dir vor allem die Beispiele der User an ;)

ace23
29-01-2006, 17:14
Hm aber das kann doch auch nciht so richtig klappen wenn ich mit array_combine arbeite, da ich dann ja array2 und 3 verwenden muss und dann hab ich ja nicht alle werte aus array2 sondern nur 2 davon.
Mit array1 kann man das ja nicht machen, weil die anzahl der elemente nicht übereinstimmt.

Gaert
29-01-2006, 21:13
Hallo ace23,

wie wärs denn, wenn du mit z.B. einem Mehrdimensionalen Array arbeitest?

Beispiel:



$data[1] = array();
$data[1]['name'] = 'Apfel';
$data[1]['gruppen'] = array();
$data[1]['gruppen'][] = 'Apfel groß';
$data[1]['gruppen'][] = 'Apfel klein';
//... usw.

//Gruppen Ausgabe:
$auswahl = 1;
$name = $data[$auswahl]['name'];
echo "Du hast $name gewählt.<br />";
$gruppen = $data[$auswahl];
foreach ($gruppen as $key=>$gruppe) {
echo "$key: $gruppe <br />";
}
... alternativ könnte man das Ganze natürlich auch mit Objekten machen.

Gruß,

Gaert

ace23
29-01-2006, 21:54
hi,

an sowas hab ich auch schon gedacht, aber bin dann daran gescheitert das ich nicht wusste wie ich das ganze da rein bekomme, denn die 3 arrays kommen aus einer datenbank aus 2 tabellen.

ace23
30-01-2006, 09:54
Moin,
also ich hab mal hin und her versucht, weiss aber ned ob das so richtig ist, weil ich bekomme es nicht hin.

Ich müsste ja erstmal das Hauptprodukt aus der DB holen mit id und name.
Sagen wir mal ID=1 und Name=Apfel uswusw.
Dann muss ich doch in der While schleife $data["$result[id]"] = "$result[name]"; reinpacken damit er mir das allen ins erste array packt.
So dann wiederrum hole ich in einer zweiten query die daten die zu den namen passen, also wieder id, namens id, und bezeichnung und muss dann doch wieder in der while Schleife das array füllen richtg?
Also in der art $data[1]['gruppen']["$result[id]"] = "$result[name]";

So und genau da bin ich irgendwie zu doof für.
Also die [1] im Array wäre doch für das gesamte Produkt, z.b. Äpfel und wenn ich dann ne [2] hätte wäre das ja dann das zweite Produkt.
Demnach müsste ich doch bei den produktquerys die [1] gegen die id tauschen oder und dann unten in der zweiten query erstmal guggen wo was hin muss?

ach man ist das ein mist ;)

Romanday
30-01-2006, 11:53
So und genau da bin ich irgendwie zu doof für.
Also die [1] im Array wäre doch für das gesamte Produkt, z.b. Äpfel und wenn ich dann ne [2] hätte wäre das ja dann das zweite Produkt.
Demnach müsste ich doch bei den produktquerys die [1] gegen die id tauschen oder und dann unten in der zweiten query erstmal guggen wo was hin muss?

ach man ist das ein mist ;)


Mehrdimensionale Arrays sind unheimlich bequem, verlangen aber ein
wenig Übung. In deinem Fall verwechselst du in der 2. Dimension
Key und Value.

Tip:
kleines externen Beispiel machen (oder das von Gaert nehmen)
und lesen, schreiben, löschen, erweitern, sortieren etc, üben.

Weiterhin, dein Array möglichst übersichtlich formatieren,
das hilft dir bei der Fehlersuche.
(z.B.)
http://www.michael-berndt.de/ie/tux/sitemap_mit_print_r.htm

ace23
30-01-2006, 15:42
So also ich habs geschaft, musste mich allerdings ein wenig dazu weiter informieren.



$query=$DB->query("SELECT gruppen.gid, gruppen.name, typen.id, typen.gruppenid, typen.typenname FROM gruppen Inner Join typen ON gruppen.gid = typen.gruppenid ORDER BY gruppen.gid ASC");
while($result=$DB->fetch_array($query)) {
$data[$result['gid']][$result['id']] = $result['typenname'];
}

Gut nun hab ich das erstmal mit den testdaten hinbekommen, nun will ich das weiter ausgeben.

Ich habe nun zwei templates im ersten will ich die namen der gruppen ausgeben (hab ich in einem anderen array nennen wir es 3) und daneben im TD das selectfeld mit den typen.
Da ich ja nun alles in dem array1 habe muss ich das ganze eingrenzen auf die Auswahl der gruppen die in einem anderen array2 stehen, also das er nur die anzeigt aus dem ersten array die auch gewählt sind.

Problem ist nun das ich nicht weiss wie ich weiter vorgehen muss um das zu machen. Ich scheitere schon am anfang wenn ich das array1 ausgeben will weil mit foreach geht das ja ned so ohne weiteres.

ace23
30-01-2006, 16:08
So hab mich nochmal zusammengerissen.

Also so würde es gehen:

foreach($data as $key => $value) {
$game=$gnames[$key];
foreach($value as $key2 => $value2) {
$selectmodi_row.=sprintf("<option value=\"%d\" %s >%s</option>\n" , $key2, $selected, $value2);
}
eval ("\$database_row.=\"".templateinclude("liga/squadcenter_clanprofile_setmodi_games_bit")."\";");
}

Aber da wäre das Problem wie ich schon mal hatte in einem anderen Fall, das ich beim weiteren Datensatz doppelte ausgaben (in dem fall der Modis) habe.

Also
Name 1 Modus1, Modus2
Name 2 Modus1, Modus2, Modus4, Modus5

mhhhhh immer dieser mist

Romanday
30-01-2006, 16:51
So hab mich nochmal zusammengerissen.

Also so würde es gehen:

foreach($data as $key => $value) {
$game=$gnames[$key];
foreach($value as $key2 => $value2) {
$selectmodi_row.=sprintf("<option value=\"%d\" %s >%s</option>\n" , $key2, $selected, $value2);
}
eval ("\$database_row.=\"".templateinclude("liga/squadcenter_clanprofile_setmodi_games_bit")."\";");
}

Aber da wäre das Problem wie ich schon mal hatte in einem anderen Fall, das ich beim weiteren Datensatz doppelte ausgaben (in dem fall der Modis) habe.

Also
Name 1 Modus1, Modus2
Name 2 Modus1, Modus2, Modus4, Modus5

mhhhhh immer dieser mist

Herzlichen Glückwunsch.
Aber wie ich schon sagte, ohne üben is nich.:D

ace23
30-01-2006, 16:55
Tja wenn sich das Üben aufs array bezieht hast du recht. Aber dadurch das ich die $selectmodi_row im $database_row drin habe bekomme ich ja denke ich dieses problem, nur wie soll ich das z.B. üben? ich habe ja eigentlich keine andere Möglichkeit weil ich es ja in diesem Template brauche.

ace23
30-01-2006, 20:10
Hat wenigstens jemand noch nen Tipp dazu? dann hätt ich das vielleicht blad gepackt.

Romanday
31-01-2006, 05:43
Tja wenn sich das Üben aufs array bezieht hast du recht. Aber dadurch das ich die $selectmodi_row im $database_row drin habe bekomme ich ja denke ich dieses problem, nur wie soll ich das z.B. üben? ich habe ja eigentlich keine andere Möglichkeit weil ich es ja in diesem Template brauche.

Die Begabten wollen zuviel auf 1x und bremsen sich dann aus.:D
Wenn du dich mit Arrays beschäftigst, ist nachher wurscht woher
die kommen. Daher ob du Sie selber anlegt hast, oder irgendeine
PHP-MySQL Funktion dir dein Array erstellt hast.

PHP macht dir das nun wirklich einfach, das es viele nützliche
Funktionen schon mitbringt. In anderen Sprachen weht ein anderer
Wind.

http://www.php.net/manual/en/ref.array.php

Nach Möglichkeit...
Jede Funktion 1x durchgehen, sich selber Notizen und ein Beispiel
anlegen.

ace23
31-01-2006, 11:46
HI,

also wenn ich mir so manchen Usercomment anschaue in dem Manual, dann würde ich doch mal vermuten das ich nicht unbedingt eine zweite schleife in der schleife brauchen würde.

ace23
31-01-2006, 17:01
ja gut wies scheint muss ich das dann wohl aufgeben, ich find nix wie ichs machen kann, auch wenn ich jahrelang in dem manual rumsuche und lese.

Romanday
31-01-2006, 19:16
ja gut wies scheint muss ich das dann wohl aufgeben, ich find nix wie ichs machen kann, auch wenn ich jahrelang in dem manual rumsuche und lese.

Hier wird nicht aufgegeben!
Du bist jetzt seit dem 26.09.2001 dabei.

Löse dich von dem Copy & Paste Muster, oder wo finde ich etwas
im Internet, oder Wer hilft mir.

Es geht ums Verstehen.
Also, Kurs machen, oder Buch kaufen etc.
Und das Forum hier ist nur als Ergänzung zu sehen, aber nicht
als Unterricht.

Nachher geht es schneller sich ein kleines Scirpt zu schreiben,
als stundenlang im Netz zu suchen.:D

ace23
31-01-2006, 20:54
Also zum einen copy und paste ich fast nix wenn ich was mache, sondern überlege mir wie ich vorgehen will und was ich brauche. Zum anderen fehlt mir einfach die Zeit einen kurs zu machen, bisher hab ich mir immer mehr beibringen können wenn ich an was gearbeitet habe.

In diesem Fall weiss ich jedoch nicht wie ich aus 1000 Arrayfunktionen mir da was basteln kann das funktioniert.
Das es hier keine Komplettlösungen gibt ist mir klar, das verlange ich ja garnicht, nur kann man von mir auch nicht verlangen das ich mir für jede funktion von arrays notizen, beispiele und übungen mache. Ich Arbeite meißtens 9 Stunden oder mehr am Tag und mach nebenbei ebend ein wenig in php für mich rum. Dann habe ich auch noch Familie, also alles in allem ein wenig schwer.