multidimensionales Array nur zum Teil beschreiben lassen
- Gumfuzi
- Ehemaliges Teammitglied
- Beiträge: 2454
- Registriert: 26.03.2004 22:25
- Wohnort: Linz, AT
- Kontaktdaten:
multidimensionales Array nur zum Teil beschreiben lassen
Hallo Leute,
Ich habe zwei getrennte Schleifen. In jeder Schleife wird ein Teil des multidimensionalen Arrays definiert.
Beispiel:
1. Schleife:
$array1[Name1] = 10 (=10 Euro)
2. Schleife:
$array2[Name1] = 5 (=5 Taler)
Nun soll aber ein Array daraus werden.
Entweder man kann anstelle des normalen Arrays ein multidimensionales Array machen, wo immernur ein Teil des Array pro Schleife beschrieben wird, oder man fügt die Arrays anhand der Schlüssel zusammen.
Aber wie?
Ich habe zwei getrennte Schleifen. In jeder Schleife wird ein Teil des multidimensionalen Arrays definiert.
Beispiel:
1. Schleife:
$array1[Name1] = 10 (=10 Euro)
2. Schleife:
$array2[Name1] = 5 (=5 Taler)
Nun soll aber ein Array daraus werden.
Entweder man kann anstelle des normalen Arrays ein multidimensionales Array machen, wo immernur ein Teil des Array pro Schleife beschrieben wird, oder man fügt die Arrays anhand der Schlüssel zusammen.
Aber wie?
Du kannst niemals alle mit deinem Tun begeistern. Selbst wenn du über's Wasser laufen kannst, kommt einer daher und fragt, ob du zu blöd zum Schwimmen bist.
https://www.deskmodder.de
https://www.deskmodder.de
- D@ve
- Ehemaliges Teammitglied
- Beiträge: 3842
- Registriert: 28.08.2002 19:33
- Wohnort: Bretzfeld
- Kontaktdaten:
Ganz verstanden habe ich das nicht...
Entweder so:
Oder verschachtelt
Gruß, Dave
Entweder so:
Code: Alles auswählen
$anzahl = 7;
for ($i = 0; $i < $anzahl; $i++)
{
my_array[1][$i] = 10;
my_array[2][$i] = 5;
}
Oder verschachtelt
Code: Alles auswählen
$anzahl_aussen = 7;
$anzahl_innen = 7;
for ($i = 0; $i < $anzahl_aussen; $i++)
{
for ($j = 0; $j < $anzahl_innen; $j++)
{
my_array[$i][$j] = 10;
}
}
There are only 10 types of people in the world: Those who understand binary, and those who don't
- Gumfuzi
- Ehemaliges Teammitglied
- Beiträge: 2454
- Registriert: 26.03.2004 22:25
- Wohnort: Linz, AT
- Kontaktdaten:
OK, da habe ich mich wohl etwas ungeschickt ausgedrückt - sorry.
Ich meinte das so:
Es soll ein Array geben, daß in etwa so aussehen soll
Key, Wert1, Wert2
...
Ich habe programmtechnisch aber für "Wert1" und "wert2" je eine eigene Schleife an unterschiedlichen Stellen des Programmcodes.
Nun war mein Gedanke, daß ich in der ersten Schleife nur den Array mit "key" und "Wert1" beschreibe und den "Wert2" dabei unverändert lasse.
In der zweiten Schleifen (später im Codeteil) soll dann nur mehr "key" und "Wert2" beschrieben werden und dabei der "Wert1" unverändert bleiben.
Dieses fertige Array sollte dann mit einer Schleife in die Template übertragbar sein, sodaß alle Elemente in einer Tabelle ausgegeben werden können.
Ich meinte das so:
Es soll ein Array geben, daß in etwa so aussehen soll
Key, Wert1, Wert2
...
Ich habe programmtechnisch aber für "Wert1" und "wert2" je eine eigene Schleife an unterschiedlichen Stellen des Programmcodes.
Nun war mein Gedanke, daß ich in der ersten Schleife nur den Array mit "key" und "Wert1" beschreibe und den "Wert2" dabei unverändert lasse.
In der zweiten Schleifen (später im Codeteil) soll dann nur mehr "key" und "Wert2" beschrieben werden und dabei der "Wert1" unverändert bleiben.
Dieses fertige Array sollte dann mit einer Schleife in die Template übertragbar sein, sodaß alle Elemente in einer Tabelle ausgegeben werden können.
Du kannst niemals alle mit deinem Tun begeistern. Selbst wenn du über's Wasser laufen kannst, kommt einer daher und fragt, ob du zu blöd zum Schwimmen bist.
https://www.deskmodder.de
https://www.deskmodder.de
- Gumfuzi
- Ehemaliges Teammitglied
- Beiträge: 2454
- Registriert: 26.03.2004 22:25
- Wohnort: Linz, AT
- Kontaktdaten:
Ich habe es nun so probiert:
in der ersten Schliefe:
in der 2. Schleife:
Hier der ganze Codeteil (für den besseren Überblick):
(es sind in dem Code noch ein paar unnötige Zeilen, die mom noch der Kontrolle dienen, ob die Variablen richtig belegt sind)
Stimmt die Array-Zuweisung in der Forum?
Wenn ja, wie realisiere ich das mit der While-Schleife(soll nach dem o.a. Code kommen; übergibt den Array an das Template) bei einem multidimensionalem Array? Was kann ich als Bedingung für die Schleife verwenden?
in der ersten Schliefe:
Code: Alles auswählen
$array = array($row['highscore_player']=>array($row['Anzahl']=>0));
Code: Alles auswählen
$array = array($key=>array(current($array[$key])=>$val));
Code: Alles auswählen
$sql='SELECT highscore_player, Count(*) AS Anzahl FROM `phpbb_ina_highscore` WHERE `highscore_mon` = ' . date("m", time()) . ' AND `highscore_year` = ' . date("Y", time()) . ' GROUP BY highscore_player';
if(!$result = $db->sql_query($sql)) {
message_die(GENERAL_ERROR, 'Fehler beim Auslesen der HiScore-Informationen', '', __LINE__, __FILE__, $sql);
}
while($row = $db->sql_fetchrow($result))
{
$template->assign_block_vars('test', array(
'MON_NAME' => $row['highscore_player'],
'MON_ANZ' => $row['Anzahl']
));
$mon[$row['highscore_player']] = $row['Anzahl'];
$array = array($row['highscore_player']=>array($row['Anzahl']=>0));
}
$sql = "SELECT * FROM " . iNA_GAMES . "
ORDER BY game_name";
if( !$result = $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, $lang['no_game_data'], "", __LINE__, __FILE__, $sql);
}
$game_count = $db->sql_numrows($result);
$game_rows = $db->sql_fetchrowset($result);
for($i = 0; $i < $game_count; $i++)
{
$game_id = $game_rows[$i]['game_id'];
$game_name = $game_rows[$i]['game_name'];
if ($game_rows[$i]['reverse_list'])
{
$list_type = 'ASC';
}
else
{
$list_type = 'DESC';
}
$sql = "SELECT * FROM " . iNA_SCORES . "
WHERE game_name = '" . $game_name . "'
ORDER BY score $list_type, date ASC";
if(!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, $lang['no_score_data'], "", __LINE__, __FILE__, $sql);
}
$score_info = $db->sql_fetchrow($result);
$best_player[$i] = $score_info['player'];
$arr[$best_player] = $arr[$best_player] + 1;
$template->assign_block_vars("game", array(
"BEST_PLAYER" => $best_player[$i],
"NAME" => $game_name)
);
}
$zaehle = array_count_values($best_player);
while(list($key, $val) = each($zaehle))
{
$template->assign_block_vars("hiscore", array(
"NAME" => $key,
"ANZ" => $val
));
$hi[$key] = $val;
$array = array($key=>array(current($array[$key])=>$val));
}
Stimmt die Array-Zuweisung in der Forum?
Wenn ja, wie realisiere ich das mit der While-Schleife(soll nach dem o.a. Code kommen; übergibt den Array an das Template) bei einem multidimensionalem Array? Was kann ich als Bedingung für die Schleife verwenden?
Du kannst niemals alle mit deinem Tun begeistern. Selbst wenn du über's Wasser laufen kannst, kommt einer daher und fragt, ob du zu blöd zum Schwimmen bist.
https://www.deskmodder.de
https://www.deskmodder.de
mach mal aus dem
folgendes
das
sieht auch ziemlich seltsam aus 
was soll der code denn eigendlich machen?
Code: Alles auswählen
$array = array($row['highscore_player']=>array($row['Anzahl']=>0));
Code: Alles auswählen
$array[$row['highscore_player']][$row['Anzahl']] = 0;
Code: Alles auswählen
$array = array($key=>array(current($array[$key])=>$val));

was soll der code denn eigendlich machen?
- D@ve
- Ehemaliges Teammitglied
- Beiträge: 3842
- Registriert: 28.08.2002 19:33
- Wohnort: Bretzfeld
- Kontaktdaten:
Also ich blick da auch nicht wirklich durch. Vierfach verschachtelte mehrdimensionale Arrays (weißt Du wieviel Millionen Datensätze so erzeugst).
Du kannst den zwar mit dem Befehl key() theoretisch auch wieder in array schreiben:
wirklich Sinn machen tut das aber nicht...
Alternativ kannst Du auch noch auf eine Array über eine foreach-Schleife in verbindung mit "as" zugreifen
Aber wie schon gesagt: Vielleicht schreibst Du einfach mal, was Du vorhhast...
Gruß, Dave
Was meinst Du mit "Key"?? Als Key bezeichnet man in der Regel den Schlüssel des Arrays, also den Wert in echigen Klammern:Nun war mein Gedanke, daß ich in der ersten Schleife nur den Array mit "key" und "Wert1 beschreibe
Code: Alles auswählen
$array[$key]
Code: Alles auswählen
$ein_array[1] = key($ein_anderes_array);

Alternativ kannst Du auch noch auf eine Array über eine foreach-Schleife in verbindung mit "as" zugreifen
Code: Alles auswählen
foreach($array as $key => $inhalt)
{
echo 'Inhalt des Array an der Stelle ' . $key . ' ist ' . $inhalt .'<br>';
}
Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
- Gumfuzi
- Ehemaliges Teammitglied
- Beiträge: 2454
- Registriert: 26.03.2004 22:25
- Wohnort: Linz, AT
- Kontaktdaten:
Es handelt sich hierbei um den Activity Mod, wo ich nun auf einer eigenen Seite eine spezielle Liste haben will:
Der ActivityMod speichert u.a. einen "ewigen" HiScore und einen MonatsHiScore (in zwei getrennten Tabellen) für jedes Spiel, damit man weiß, wer im aktuellen Monat die meisten Punkte hat und wer den all-time-Rekord hält.
Ich will genau wissen, welcher Spieler wieviel Monatsrekorde bzw. ewige Rekorde hat und dann mit einer Formel eine Liste der besten Spieler berechnen lassen.
Mit dem o.a. Code habe ich ja bereits folgendes geschafft:
1.)
es werden Spielername und Anzahl MonatsHiScores an die Template übergeben (noch unsortiert)
2.)
es werden Spielername und Anzahl ewiger HiScores an die Template übergeben. (noch unsortiert)
Wie kann ich jetzt diese Informationen in EINE Schleife verpacken, wo dann Spielername, Anzahl MonatsHiScores UND Anzahl ewiger Hiscores an die Template übergeben werden? Ebenso sollte zusätzlich eine weitere Variable mitübergeben werden (zB. MonatsHiScore * 2 + ewiger Hiscore * 5) und nach dieser sollte dann sortiert werden.
Der ActivityMod speichert u.a. einen "ewigen" HiScore und einen MonatsHiScore (in zwei getrennten Tabellen) für jedes Spiel, damit man weiß, wer im aktuellen Monat die meisten Punkte hat und wer den all-time-Rekord hält.
Ich will genau wissen, welcher Spieler wieviel Monatsrekorde bzw. ewige Rekorde hat und dann mit einer Formel eine Liste der besten Spieler berechnen lassen.
Mit dem o.a. Code habe ich ja bereits folgendes geschafft:
1.)
es werden Spielername und Anzahl MonatsHiScores an die Template übergeben (noch unsortiert)
2.)
es werden Spielername und Anzahl ewiger HiScores an die Template übergeben. (noch unsortiert)
Wie kann ich jetzt diese Informationen in EINE Schleife verpacken, wo dann Spielername, Anzahl MonatsHiScores UND Anzahl ewiger Hiscores an die Template übergeben werden? Ebenso sollte zusätzlich eine weitere Variable mitübergeben werden (zB. MonatsHiScore * 2 + ewiger Hiscore * 5) und nach dieser sollte dann sortiert werden.
Du kannst niemals alle mit deinem Tun begeistern. Selbst wenn du über's Wasser laufen kannst, kommt einer daher und fragt, ob du zu blöd zum Schwimmen bist.
https://www.deskmodder.de
https://www.deskmodder.de
- Gumfuzi
- Ehemaliges Teammitglied
- Beiträge: 2454
- Registriert: 26.03.2004 22:25
- Wohnort: Linz, AT
- Kontaktdaten:
Update:
Nun habe ich endlich meine Liste, wie ich sie wollte, jedoch ist die nicht sortiert.
Wie kann ich die Ausgabe nach "TOTAL" sortieren lassen? Geht das innerhalb der Schleife, oder muss ich da zuerst ein multidimensionales Array definieren, nur bin ich echt zu dumm dafür, ich checke das mit der Syntax mit diesen (multi-)Arrays nicht, ich probiere schon seit tagen, aber das wird nix.
Mit array_multisort kann man sortieren, aber ich kann es nichtmal beschreiben (habe auch saerdnaer's Methode benutzt - funzt auch nicht).
Habt Mitleid mit mir und gebt mir bitte noch einen Hinweis, danke!!!
Code: Alles auswählen
$monat = 2;
$ewig = 5;
$sql='SELECT highscore_player, Count(*) AS Anzahl FROM `phpbb_ina_highscore` WHERE `highscore_mon` = ' . date("m", time()) . ' AND `highscore_year` = ' . date("Y", time()) . ' GROUP BY highscore_player';
if(!$result = $db->sql_query($sql)) {
message_die(GENERAL_ERROR, 'Fehler beim Auslesen der HiScore-Informationen', '', __LINE__, __FILE__, $sql);
}
while($row = $db->sql_fetchrow($result))
{
$mon[$row['highscore_player']] = $row['Anzahl'];
}
$sql = "SELECT * FROM " . iNA_GAMES . "
ORDER BY game_name";
if( !$result = $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, $lang['no_game_data'], "", __LINE__, __FILE__, $sql);
}
$game_count = $db->sql_numrows($result);
$game_rows = $db->sql_fetchrowset($result);
for($i = 0; $i < $game_count; $i++)
{
$game_id = $game_rows[$i]['game_id'];
$game_name = $game_rows[$i]['game_name'];
if ($game_rows[$i]['reverse_list'])
{
$list_type = 'ASC';
}
else
{
$list_type = 'DESC';
}
$sql = "SELECT * FROM " . iNA_SCORES . "
WHERE game_name = '" . $game_name . "'
ORDER BY score $list_type, date ASC";
if(!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, $lang['no_score_data'], "", __LINE__, __FILE__, $sql);
}
$score_info = $db->sql_fetchrow($result);
$best_player[$i] = $score_info['player'];
$arr[$best_player] = $arr[$best_player] + 1;
}
$zaehle = array_count_values($best_player);
while(list($key, $val) = each($zaehle))
{
$hi[$key] = $val;
}
$sql = "SELECT username FROM " . USERS_TABLE . " ORDER BY username";
if( !$result = $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, $lang['no_user_data'], "", __LINE__, __FILE__, $sql);
}
while($row = $db->sql_fetchrow($result))
{
$user = $row['username'];
if ($mon[$user] > 0 OR $hi[$user] > 0)
{
$c = $c + 1;
$template->assign_block_vars("total", array(
"PLATZ" => $c,
"NAME" => $user,
"MON_ANZ" => $mon[$user],
"HI_ANZ" => $hi[$user],
"TOTAL" => $mon[$user] * $monat + $hi[$user] * $ewig
));
}
}
Wie kann ich die Ausgabe nach "TOTAL" sortieren lassen? Geht das innerhalb der Schleife, oder muss ich da zuerst ein multidimensionales Array definieren, nur bin ich echt zu dumm dafür, ich checke das mit der Syntax mit diesen (multi-)Arrays nicht, ich probiere schon seit tagen, aber das wird nix.
Mit array_multisort kann man sortieren, aber ich kann es nichtmal beschreiben (habe auch saerdnaer's Methode benutzt - funzt auch nicht).
Habt Mitleid mit mir und gebt mir bitte noch einen Hinweis, danke!!!
Du kannst niemals alle mit deinem Tun begeistern. Selbst wenn du über's Wasser laufen kannst, kommt einer daher und fragt, ob du zu blöd zum Schwimmen bist.
https://www.deskmodder.de
https://www.deskmodder.de