Zahlen fett darstellen

hpvw hat gesagt.:
Mein Mathelehrer hätte gesagt: "Simpelste Mathematik!" ... und alle hätten ihm einen Vogen gezeigt.
Ja, ich verstehe den Code, aber ich habe ihn auch geschrieben. Durch Sven's Code steige auch noch nicht durch. Ich kommentiere den Code noch mal, vielleicht ist es dann ja klarer (dabei ist mir aufgefallen, dass man ihn noch etwas vereinfachen konnte und mir ist ein Fehler aufgefallen):
PHP:
<pre>
<?
    //A Lot Numbers beinhaltet alle zu prüfenden Zahlen
    $aln=array(
        170958590,
        170958689,
        170958789);

    //ermittelt die größte der zu prüfenden Zahlen,
    //da man an ihr die maximale Anzahl Ziffern
    //ablesen kann
    $max=max($aln);
    
    //der aufgerundete Zehnerlogarithmus der
    //größten Zahl ermittelt, wie viele
    //Ziffern diese Zahlt hat
    $nCount=ceil(log10($max));
    
    //Hilfsvariable zum Zählen der gleichen
    //Anzahl Ziffern, beginnend am Anfang der Zahlen
    $matchingDigits=0;
    
    //Hilfsvariable, die false wird, wenn eine der
    //Zahlen an der aktuellen (siehe folgende Schleife)
    //Ziffer keine Übereinstimmung hat
    $isMatch=true;
    
    //Schleife, die $matchingDigits hochzählt,
    //solange noch alle bis hierhin betrachteten
    //Ziffern aller Zahlen gleich sind
    do {
        //berechnung der ersten "$matchingDigits" Ziffern
        //der maximalen Zahl
        //  pow(10,irgendwas entspricht 10 hoch irgendwas
        //  Es ist also das Gegenstück zum Logarithmus oben
        $mn=floor($max/pow(10,$nCount-$matchingDigits));
        
        //Alle Zahlen im Array prüfen
        foreach($aln as $n) {
            //berechnung der ersten "$matchingDigits" Ziffern
            //der bestimmten Zahl im Array
            $tmp = floor($n/pow(10,$nCount-$matchingDigits));
            
            //Am Ende steht der Vergleich mit den ersten
            //"$matchingDigits" Ziffern der maximalen Zahl
            //  ergibt dieser false, ist auch $isMatch false
            $isMatch = $isMatch && ($mn==$tmp);
        }
        //die Schleife wird nur fortgesetzt, wenn es
        //bis hierhin übereinstimmt und $matchingDigits
        //die Anzahl der Ziffern nicht überschreitet
    } while ($isMatch && $matchingDigits++<=$nCount);
    
    //da der erste Fehler in $matchingDigits mitgezählt wurde,
    //muss dies nun korrigiert werden.
    $matchingDigits--;
    
    //Die Ausgabe aller Zahlen im Array
    foreach($aln as $n) {
        //nun werden alle Zahlen zu einem gleich langen
        //String, entsprechend der Anzahl Ziffern der
        //größten Zahl gewandelt
        $s = str_pad ( $n, $nCount, ' ', STR_PAD_LEFT);
        
        //Als übereinstimmende Ziffern werden die ersten
        //$matchingDigits aus dem String kopiert
        $eq = subStr ($s,0,$matchingDigits);
        
        //Und als nicht übereinstimmende Ziffern der Rest
        $ne = subStr ($s,$matchingDigits);
        
        //nun nur noch die Ausgabe
        echo "<b>".$eq."</b>".$ne."\n";
    }

?>
</pre>
Gruß hpvw


*schluck*
Ich hoffe du verdienst 5000 € im Monat oder aufwärts :-)
Wenn nicht, dann mach das :)
 
Soapp hat gesagt.:
*schluck*
Ich hoffe du verdienst 5000 € im Monat oder aufwärts :-)
Wenn nicht, dann mach das :)
Wenn ich träume (und Nachtzuschlag kriege), verdiene ich noch viel mehr. Aber als Student, wenn ich wach bin (welch ein Widerspruch), komm' ich nicht annähernd auf diese Summe.

Die Frage von German steht übrigens noch aus:
German hat gesagt.:
@Soapp: Für was brauchst du das eigentlich?
Insbesondere die Frage, ob Du Teilgleichheit für rechts- oder linksbündige Darstellung prüfen willst.

Gruß hpvw
 
eigentlich wollte ich damit TCP-Timestamps und TCP Sequenznummern
kennzeichnen. Aber nachdem die doch recht unterscheidlich sind, habe ich mal davon Abstand genommen, die fett zu machen ..

Ich hoffe Ihr prügelt mich jetzt nicht ...
Aber ich hab mir den Code von euch auf alle Fälle liebevoll in meine codeschnipsel.php
kopiert. Also, es war nicht umsonst :) Danke


Soapp
 
Zurück