Zahlenmatrix generieren

balufreak

Aktives Mitglied
Thread Starter
Dabei seit
12.10.2003
Beiträge
1.563
Reaktionspunkte
28
Hallo Leute!

Ich möchte mit Hilfen von PHP eine Zahlenmatrix generieren. Am schluss sollte diese etwa so aussehen

Code:
1  5  4  3  2  
2  1  5  4  3 
3  2  1  5  4
4  3  2  1  5
5  4  3  2  1

Nun wie kann ich das bewerkstelligen? So dass keine Zahl pro Reihe doppelt vorkommt?
 
mach ein array von arrays,
jede Zeile ein array.

Dann generierst Du Zeilen a la

PHP:
$rows=0; // wir haben noch keine Zeile
$firstline=array();
while ($rows<5)
{
 do {
   $zahl= erzeuge_zufalls_zahl();
 } while (in_array($zahl,firstline))
array_push($zahl,$firstline);
$rows++;
}

leg mich nicht auf die korrekten Methodenaufrufe fest, ich muß in letzter Zeit viel Java machen, daher betrachte es nur als Pseudocode. Mach das für alle Lines und füg die dann zur Matrix zusammen!
 
Ich weis jetzt nicht genau wie Du es meinst, balufreak.
So dass keine Zahl pro Reihe doppelt vorkommt?
Ist mit Reihe jetzt gemeint dass jede Zahl nur ein mal pro Zeile vorkommen darf? Oder nur einmal pro Spalte? Oder beides?
Ich glaube wegus hat es auch so verstanden wie ich als erstes: pro Zeile. In dem Fall geht es viel kürzer:
PHP:
$zahlen = array(1, 2, 3, 4, 5);
 $lines = array_fill(0, 4, $zahlen);
 array_map("shuffle", $lines);
Ansonsten brauchst Du eine Schleife die das erste Array-Element entfern und hinten wieder anhängt. Kannst Du z.B. leicht mit array_push und array_shift machen.
 
Lege für jede Zeile ein Array an, das du dann mit "shuffle()" durcheinan-
derwirfst. So kannst du dann sicher sein, dass jeder Wert in der Zeile ex-
akt ein mal vorkommt.

Edit: dms war (mal wieder) schneller...
 
Zuletzt bearbeitet:
Hier noch die Möglichkeit mit array_push und array_shift. Mir is grad langweilig. ;)

PHP:
$zahlen = array(1, 2, 3, 4, 5);
 $lines = array();

 for($i=0; $i<5; $i++) {
    $lines[] = $zahlen;
    array_push($zahlen, array_shift($zahlen));
 }
 
dms schrieb:
Mir is grad langweilig ;)

Mir auch....
PHP:
for($i = 0; $i <= 10; $i++)
 {
  $tmp = array(1, 2, 3, 4, 5);
  shuffle($tmp);
  $zahlen_array[$i] = implode(' ', $tmp);
 }

ot:
Warum geben array-Funktionen in PHP eigentlich boolean-Werte und keine
Arrays zurück :motz Das ist doch unlogisch zum Quadrat...

Und ausserdem wäre ich dann mit einer Zeile weniger ausgekommen.
 
Warum das so ist kann ich Dir auch nicht sagen. Diese Funktionen ändern halt direkt das übergebene Array selbst und liefern ggf. zurück ob die Aktion geklückt ist. *schulterzuck* Is halt so. :)
 
dms schrieb:
Warum das so ist kann ich Dir auch nicht sagen. Diese Funktionen ändern halt direkt das übergebene Array selbst und liefern ggf. zurück ob die Aktion geklückt ist. *schulterzuck* Is halt so. :)
Ich habe das verdammte Gefühl, dass ich bald mal PHP-Dokus wälzen
und eigene Functions, welche anstatt Bool-Werten Arrays zurückgeben,
in PHP implementieren muss ;)
 
Teilweise leuchtets mir gerade ein. array_shift z.B. liefert ja das rausgeschmissene Element zurück. Demnach muss es das array selbst ändern, denn es kann ja nicht den rausgeschmissenen Wert und ein neues Array gleichzeitig zurückgeben. Dort macht es also Sinn. Um nicht noch mehr Verwirrung zu stiften verhalten sich andere Array-Funktionen evtl. genauso.
 
moses_78 schrieb:
Ich habe das verdammte Gefühl, dass ich bald mal PHP-Dokus wälzen
und eigene Functions, welche anstatt Bool-Werten Arrays zurückgeben,
in PHP implementieren muss ;)

Das ist schon in Ordnung, zum einen was dms
angesprochen hat mit array_shift, zum anderen,
denkst du es ist sinnvoll Array's mit mehreren
tausend Elementen nach jedem PHP Seitenaufruf
durch den Speicher zu jagen und doppelt anzulegen ;)
Ich denke es kommt nur dem Speicher zu Gute...

Gruß,
Micha
 
Zurück
Oben Unten