Aufgabe

Status
Nicht offen für weitere Antworten.
Alles klar ... aber es jetzt hinterher zu editieren macht den Witz kaputt ... aber ok .. hab meine Lektion gelernt und werd es definitiv lassen.
 
Mir war grad langweilig.
Dies ist mein Ansatz um den Mechanismus dahinter in OOP umzusetzen.
Dabei habe ich drauf geachtet, das erstellen der Zahlenreihe und die Erstellung des Grids zu trennen, denn ein Grid in dieser Art kann man auch aus etwas anderem erstellen.
Da beide Klassen mit vielen Werten hantieren, habe ich mich jeweils für eine Extension vom ArrayObject entschieden, das mir viel Arbeit abnimmt.
Für das Formular und dessen Auswertung währe eine weitere Klasse fällig, da die Eingabe nix mit dem Rest zu tun hat.....

PHP:
<form method="post">
    <input type="text" name="selectedNumber" />
    <input type="submit" name="submit" />
</form>
<hr />
<?php 

//Formular auswerten
if(isset($_POST['submit'])){    
    //Zufallszahlen erstellen
    //Zu Testzwecken überschreibe ich hier die Obergrenze mit einer kleineren Zahl um die Treffer schneller zu testen
    $rand = new RandomRange(200);
    
    //Text dass die Zahl nicht gefunden wurde
    if(!$rand->offsetExists($_POST['selectedNumber'])){
        echo "<p>Die Zahl {$_POST['selectedNumber']} ist nicht dabei</p>";
    }
    
    //Das Grid erstellen
    $grid = new Grid($rand, array($_POST['selectedNumber']));
    echo $grid->getHtml();
}

/**
 * ArrayObject das eine Reihe Zufallszahlen generiert
 * Format: ArrayObject<Value>
 */
class RandomRange extends ArrayObject{
    const C_DEFAULT_SIZE = 100;
    const C_DEFAULT_MIN = 1;
    const C_DEFAULT_MAX = 999;
    
    /**
     * Konstrukteur
     * @param Int       $max_value
     * @param Int       $min_value
     * @param int       $size
     * @return void
     */
    public function __construct(
        $max_value = self::C_DEFAULT_MAX,
        $min_value = self::C_DEFAULT_MIN,
        $size = self::C_DEFAULT_SIZE
    ){
        $this->min_value = $min_value;
        $this->max_value = $max_value;
        $this->size = $size;
        
        $this->recalc();
    }

    /**
     * berechnet die Zfallszahlen neu
     * @return  void
     */
    public function recalc(){
        $this->exchangeArray(array());
        do{
            $randNumber = mt_rand($this->min_value, $this->max_value);
            if($this->offsetExists($randNumber) === FALSE){
                $this->offsetSet($randNumber, $randNumber);
            }
        }while($this->count() <  $this->size);  
        $this->ksort();          
    }  
}

/**
 * Diese Klasse geniert aus einem ArrayObject eine 2-Dimansionale Liste
 * Format: ArrayObject<ArrayObject<Value>>
 */
class Grid extends ArrayObject{
    const C_DEFAULT_WIDTH = 10;
    public $width = self::C_DEFAULT_WIDTH;
    
    /**
     * Konstrukteur
     * @param ArrayObject<Value>    $values             Alle Values für die Liste
     * @param Array<Value>          $selectedValues     ggf. selektionierte Values
     * @param Int                   $width              ggf. Listenbreite
     * @return void
     */
    public function __construct(ArrayObject $values, $selectedValues = array(), $width = self::C_DEFAULT_WIDTH){
        $this->width = $width;
        $this->recalc($values, $selectedValues);
    }
    
    /**
     * Neuberechnung der Liste
     * @param ArrayObject<Value>    $values             Alle Values für die Liste
     * @param Array<Value>          $selectedValues     ggf. selektionierte Values
     * @return void
     */
    public function recalc(ArrayObject $values, $selectedValues = array()){
        $row = array();
        foreach($values as $value){
            $row[] = (in_array($value, $selectedValues)) ? $value = "<b>{$value}</b>" : $value;
            if(count($row) == $this->width){
                $this->append($row);
                unset($row);
            }
        }
        if(count($row) > 0) $this->append($row);
    }

    /**
     * Erstellen einer einfachen HTML-Tabelle
     * @return String               HTML-Code der Liste
     */
    public function getHtml(){
        ob_start();
        echo '<table>';
        foreach($this as $row){
            echo '<tr>';
            foreach($row as $value) echo "<td>{$value}</td>";
            echo '</tr>';
        }
        echo '</table>';
        return ob_get_clean();
    }
}
?>
 
Also pars wenn du trotz der zwei hervorragenden Lösungen auf dieser seite noch immer nicht zurechtkommst, solltest du besser ein PHP-Tutorial durcharbeiten bevor du nochmal einen Thread hier *oder sonst wo* aufmachst.

grüße
 
Es würde ja erstmal reichen wenn er überhaupt mal wieder ne Antwort geben würde ... egal in welche Richtung die dann auch immer geht ...
 
Hmm ... ob er überhaupt weis was dieses Wort bedeutet ? ... Oder ob er damit vielleicht etwas anderes gemeint hat.
 
Status
Nicht offen für weitere Antworten.
Zurück