Das Problem mit den führenden Nullen

Quellcode

Je nach Projekt kommt es immer wieder einmal vor, dass man Zahlwerte mit einer oder mehrerer führenden Nullen ausgeben muss. Nun gibt es die Möglichkeit, jedes Mal auf´s neue eine Funktion zu schreiben, bei der man über mehrere if-Abfragen zum Ziel gelangt. In diesem kleinen Tutorial möchte ich eine kleine PHP-Funktion vorstellen, die das ganze dynamisch erledigt.

Quellcode PHP-Funktion für führende Nullen

function leadingNulls( $int, $string = "00000000" ){
	$lenghtInt = strlen( $int );  # count chars of integer value

	# check if length of integer value is smaller than given string 
	# length with null values
	if( $lenghtInt < strlen( $string ) ){
		$lenghtInt *= -1; # negate lengt value
		# cut integer value lenght of from the end of string 
		# and add integer value
		$string = substr( $string, 0, $lenghtInt ).$int; 
	} else {
		# if string length of integer value is greater just set 
		# string with integer value
		$string = $int;
	}
	return $string;
}

Wie die Funktion arbeitet

Auch wenn die PHP-Funktion recht einfach aufgebaut ist, möchte ich allen Anfängern hier noch eine kurze Erklärung geben, wie das ganze funktioniert:

  • Die Funktion nimmt zwei Parameter entgegen. Der erste Wert ist der Integer-Wert, den wir mit den führenden Nullen versehen wollen. Der zweite Wert ist optional und legt die Zeichenlänge der auszugebenden Zahl fest.  Per Default sind es 8 Zeichen. Es könnten theor. auch andere Zeichen übergeben werden, aber das würde dann dem Funktionsnamen ein wenig widersprechen.
  • Zunächst wird die Anzahl der Ziffern des Interger-Wertes ermittelt.
  • Danach prüfen wir, ob die Ziffernanzahl kleiner ist als die Anzahl der auszugebenden Zeichen. Wenn die Anzahl größer oder gleich ist, überschreiben wir einfach den auszugebenden String, da es sonst zu Fehler-Meldungen kommen könnte.
  • Ist der Wert kleiner, dann negieren wir den Wert für die Ziffernlänge.
  • Die PHP-Funktion substr() übernimmt dann den Rest der Arbeit. Durch den negierten Wert wird der Funktion übermittelt, dass soviele Zeichen vom Ende der Zeichenkette entfernt werden sollen, wie es Ziffern  gibt. Anschließend hängen wir einfach unseren Zahlwert ans Ende des beschnittenen Strings.
  • Abschließend werd der fertige String via return zurück gegeben.

Beispiele für den Funktionsaufruf

Hier noch drei Beispiele für den Aufruf der Funktion.

# call function leadingNulls with default string length
echo leadingNulls( 300 );
# Ausgabe: 00000300

# call function leadingNulls with definded string length
echo leadingNulls( 300, "0000" );
# Ausgabe: 0300

# call function leadingNulls with definded string length
echo leadingNulls( 300, "00" );

# Ausgabe: 300

Tipp: Wie am letzten Beispiel zu sehen ist, wird die Funktion ein wenig nutzlos, wenn der Integer-Wert mehr Ziffern hat, als der String, der zurückgegeben werden soll. Bei Einzelwerten mag das sicher nicht so schlimm sein. Wenn jedoch eine ganze Tabelle gefüllt werden soll, sieht das doch ein wenig unschön aus. In dem Fall sollte man die Länge des Strings wohl noch einmal anpassen.

// Gefällt Ihnen diese Seite oder empfinden Sie den Inhalt als besonders interessant?

Mit einem einfachen Klick können Sie es in Ihrem Sozialen Wunschmedium teilen: [Google+] |  [Facebook] |  [Twitter]

Dieser Eintrag wurde gepostet in Tutorials. Lesezeichen auf diesen Post.

4 dachten über “Das Problem mit den führenden Nullen

  1. Hallo Christian,

    das ganze geht noch ein Stück einfacher nämlich ganz ohne eigene Funktion:

    printf(“%010s”, 300);

    %0 <– besagt das dass Füllzeichen eine 0 ist
    10 <– sagt wie lang die Zeichenkette sein darf
    s <– ist der Platzhalter für die Variable/ den Wert der als zweiter Parameter übergeben wird

    Beste Grüße,
    Christian

  2. Hallo Christian :)

    Das klingt sehr interessant – muss ich dann glatt mal testen. Aber Danke für den Tipp!

    [update] Mit dem printf() wird das Ergebnis ja gleich ausgegeben. Wenn ich den Wert aber in einem String für die spätere Ausgabe benötige, ist das nicht ganz so optimal.

  3. Hello again :)

    wenn du den Wert in einer Variablen haben möchtest kannst du statt printf .. sprintf verwenden, die Syntax ist die gleiche.

    $test = sprintf(“%010s”, 300);

    print $test;

    Beste Grüße,
    Christian :)

  4. Herrlich, wieder was gelernt :) Die print-Funktionen habe ich bislang eher stiefmütterlich behandelt. Aber ich sehe, dass ich das wohl noch mal überdenken sollte :)

Schreiben Sie eine Antwort

Ihre Mail-Adresse wird nicht angezeigt.

Folgende HTML-Tags und Attribute dürfen verwendet werden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>