mmofacts.com

Frage zu Array's

gepostet vor 18 Jahre, 7 Monate von MagicForrest
Hallo,

ich hab eine kleine Frage...
Und zwar erstelle ich ein Array.
Das fütter ich mit ein paar Daten, und dann will ich folgendes damit anstellen:

-Einen Zufälligen Eintrag auslesen
-Summe von BBB Zählen
-BBB in einer neuen Variable speichern
-Einen Eintrag löschen
-BBB einen neuen Wert geben

Und der Array wird nur einmal erstellt, und dann immer so wie er ist weiter verarbeitet.
Aber irgendwie klappt es bei mir nicht, wenn ich zb. [3] lösche...

$array = array();

while($max > $anzahl)
{
$array[ ] = array('AAA' => "1",'BBB' => "2");
$anzahl++;
}

Im Grunde eine einfache Frage, aber hat nicht ganz geklappt wies sollte, deshalb frag ich mal einfach hier nach.
Hoffe mir kann da jemand helfen.
gepostet vor 18 Jahre, 7 Monate von Fornax
einen zufälligen Eintrag zu ermitteln ich recht leicht, wenn du das meinst:
$zufall = rand(0, count($array));

?>

Aber zum Rest fällt mir jetzt nichts ein, ich glaub, ich versteh dich nicht so ganz :roll:
gepostet vor 18 Jahre, 7 Monate von MagicForrest
Danke.
Zu den anderen:

$array = array();

$array[ ] = array('AAA' => "1",'BBB' => "2");
$array[ ] = array('AAA' => "1",'BBB' => "3");
$array[ ] = array('AAA' => "2",'BBB' => "4");
$array[ ] = array('AAA' => "2",'BBB' => "5");

Hier will ich zb. BBB zählen.
Also das Ergebnis sollte 14 sein. (2+3+4+5)

Oder einen Eintrag aus dem Array löschen, dass es danach zb so aussieht:
$array = array();

$array[ ] = array('AAA' => "1",'BBB' => "2");
$array[ ] = array('AAA' => "1",'BBB' => "3");
// GELÖSCHT
$array[ ] = array('AAA' => "2",'BBB' => "5");


Also hier wurde ein Eintrag gelöscht, und wenn ich jetzt BBB zählen würde, wäre das Ergebnis 10

Und dann noch einen Eintrag ändern...
Also anfags schaut es so aus:
$array = array();

$array[ ] = array('AAA' => "1",'BBB' => "2");
$array[ ] = array('AAA' => "1",'BBB' => "3");
$array[ ] = array('AAA' => "2",'BBB' => "4");
$array[ ] = array('AAA' => "2",'BBB' => "5");


Dann will ich einen Eintrag veränder, dass es zb. so aussieht:
$array = array();

$array[ ] = array('AAA' => "1",'BBB' => "2");
$array[ ] = array('AAA' => "1",'BBB' => "3");
$array[ ] = array('AAA' => "2",'BBB' => "4");
$array[ ] = array('AAA' => "2",'BBB' => "56789");
gepostet vor 18 Jahre, 7 Monate von MagicForrest
Sorry wegen doppelpost, aber kann geschlossen werden.
Hatte eigentlich eh alles richtig.
Nur ca. 30 Zeilen darüber hatte ich ein ";" vergessen... nur die Fehlermeldung bezog sich auf den Code mit den Arrays..
Naja, jedenfalls funktioniert alles so wies soll.
Danke trotzdem
// Unwichtig... Soll nicht geschlossen werden ^^



Edit: Bitte doch nicht closen.. hab da doch noch ne frage.. ^^'
Und zwar, wie kann ich einen Array per Schleife füllen?
Also ich öffne einen Array, der Inhalt soll aber dann über eine Schleife geschrieben werden... aber es kommt immer
Parse error: syntax error, unexpected T_WHILE, expecting ')' in /xxxx/xxx/xxx.php on line xxx




$array = array(

while($a123 > $b123)
{
array('AAA' => 'Blabla', 'BBB' => 12),
$b123++;
}
);
gepostet vor 18 Jahre, 7 Monate von mifritscher
Statt
$array = array(

while($a123 > $b123)
{
array('AAA' => 'Blabla', 'BBB' => 12),
$b123++;
}
);
 

while($a123 > $b123)
{
$array[]=array('AAA' => 'Blabla', 'BBB' => 12);
$b123++;
}
);

nehmen
gepostet vor 18 Jahre, 7 Monate von MagicForrest
Danke.
Habs inzwischen so gelöst:

 $array = array();

while($a1231 > $b123)
{
$array[ ] = array('AAA' => "blbla",'BBB' => "12");
$b123++;
}

Aber dein Post schaut besser aus..

Hab aber wieder einige neue Fragen/Probleme...

Ich hab in dem Array jetzt zb. 10 Einträge..
Aber wie kann ich mit einer foreach Schleife die jetzt einzeln abfragen?
Also ich will jeden Eintrag (BBB) einer Variable Hinzuzählen, und bei AAA eine if-Abfrage einbauen.
Aber irgendwie funkt das nicht richtg..
gepostet vor 18 Jahre, 7 Monate von knalli
Du brauchst wohl mal einen Crashkurs in Array-Handling..

Methode 1
 

for($i=0,$c=count($array);$i<$c;$i++)
{
// $array[$i] ist jetzt ein feld (kann weitere arrays beinhalten)
if($array[$i][0] == foo)
print('foo it');
}


Methode 2
 

foreach($array as $key => $value)
// das "$key as" kann man sich sparen, wenn man den key nicht benötigt
{
// nun ist das field auf $value gespeichert
if($value[0] == foo)
print('foo it');
}


Beide Methoden machen im Endeffekt das gleiche; Methode 1 kann man aber nicht bei assozierten Arrays verwenden (z.b. sowas wie array("name" => "wert")). Dafür sind diese Arrays und infolgedessen auch der Algorithmus wesentlich schneller und effektiver als der über foreach.

Wenn man nicht mit assozierten Arrays arbeitet, gibt es eigentlich keinen nenneswerten Grund - der mir jetzt spontan einfallen würde - der für eine Arbeit mit foreach statt for sorgen könnte.
gepostet vor 18 Jahre, 7 Monate von MagicForrest
Original von knalli
Du brauchst wohl mal einen Crashkurs in Array-Handling..



Ja
Bis jetzt hab ich alles per DB gemacht, aber jetzt will ich größere Berechnungen etc. durchführen, und da scheinen mir Arrays sinnvoll.

Wie kann ich bei Methode2 beide Werte auslesen?
Weil es gibt ja AAA und BBB..
Hab das schon so versucht, aber das hat nicht wirklich gefunkt..



Edit: Funkt, danke!!!
Aber hab noch eine Frage... und zwar, wie wähle ich einen Zufälligen Eintrag?
Das Problem ist, dass count nicht wirklich funktioniert, wenn zwischendrin schon einträge gelöscht worden sind...
Gibt es da eine andere Möglichkeit bzw. Befehl?
gepostet vor 18 Jahre, 7 Monate von friedenspanzer
Original von MagicForrest
Aber hab noch eine Frage... und zwar, wie wähle ich einen Zufälligen Eintrag?
Das Problem ist, dass count nicht wirklich funktioniert, wenn zwischendrin schon einträge gelöscht worden sind...
Gibt es da eine andere Möglichkeit bzw. Befehl?


Ich bin für die einfachste Lösung:

array_rand($array, 1)
gepostet vor 18 Jahre, 7 Monate von Klaus
Original von knalli
Dafür sind diese Arrays und infolgedessen auch der Algorithmus wesentlich schneller und effektiver als der über foreach.


Allerdings sollte man dabei count() nicht in foreach() benutzen weil die Arraylänge sonst bei jedem Schritt berechnet wird.
gepostet vor 18 Jahre, 7 Monate von knalli
Original von Klaus
Original von knalli
Dafür sind diese Arrays und infolgedessen auch der Algorithmus wesentlich schneller und effektiver als der über foreach.


Allerdings sollte man dabei count() nicht in foreach() benutzen weil die Arraylänge sonst bei jedem Schritt berechnet wird.

Wofür benötige ich in foreach ein count()?
gepostet vor 18 Jahre, 7 Monate von MagicForrest
So, hab das ganze und noch einiges mehr gelöst.
Jetzt hab ich mal verstanden wie das genau funkt... :roll:
Danke an Euch alle!

Auf diese Diskussion antworten