Forum und email

sprintf

(PHP 4, PHP 5)

sprintf — Επιστρέφει ένα μορφοποιημένο string

Περίγραφή

string sprintf ( string $format [, mixed $args ] )

Επιστρέφει ένα string, που παράγεται σύμφωνα με το string format .

Το string format συντίθεται από καμία ή περισσότερες directives: κανονικοί χαρακτήρες (εκτός του %) που αντιγράφονται απευθείας στο αποτέλεσμα, και προδιαγραφές μετατροπής, κάθε μία εκ των οποίων χρησιμοποιεί τη δική της παράμετρο. Τα προηγούμενα ισχύουν και για τις συναρτήσεις sprintf() και printf().

Κάθε προδιαγραφή μετατροπής αποτελείται από το επι τοις εκατό σύμβολο (%), ακολουθούμενο από ένα ή περισσότερα από τα παρακάτω στοιχεία, με την ακόλουθη σειρά:

  1. Έναν προαιρετικό προσδιοριστή γεμίσματος, ο οποίος ορίζει το χαρακτήρα που θα χρησιμοποιηθεί για το γέμισμα των string, από τη δεξιά τους πλευρά. Αυτός μπορεί να είναι ένα κενό ή το 0 (ο χαρακτήρας μηδέν). Η προεπιλεγμένο είναι το γέμισμα με κενά. Ένας άλλος χαρακτήρας γεμίσματος μπορεί να καθοριστεί με το να τοποθετήσετε μπροστά του ένα απλό εισαγωγικό ('). Ανατρέξτε στο σχετικό παράδειγμα.
  2. Εναν προαιρετικό προσδιοριστή στοίχισης, ο οποίος ορίζει εάν το αποτέλσμα θα είναι αριστερής ή δεξιάς στοίχκσης. Η προκαθορισμένη επιλογή είναι η δεξιά στοίχιση. Εάν προστεθεί ο χαρακτήρας - τότε θα προκύψει αριστερή στοίχιση.
  3. Έναν προαιρετικό αριθμό, έναν προσδιοριστή πλάτους που ορίζει πόσοι χαρακτήρες (ελάχιστο πλήθος) θα πρέπει να επιστρέψει η μετατροπή.
  4. Έναν προαιρετικό προσδιοριστή ακρίβειας, που ορίζει πόσα δεκαδικά ψηφία θα πρέπει να εμφανίζονται στους αριθμούς κινητής υποδιαστολής. Η επιλογή αυτή δεν επιδρά σε κάποιον άλλο τύπο εκτός από τον float. (Μία άλλη χρήσιμη συνάρτηση για σχηματισμό αριθμών είναι η number_format().)
  5. Έναν προσδιοριστή τύπου που ορίζει ως προς ποιο τύπο θα διαχειριστούν τα δεδομένα των ορισμάτων. Πιθανοί τύποι:

    • % - Ένας επί τοις εκατο χαρακτήρας. Δε χρειάζονται ορίσματα.
    • b - το όρισμα μεταχειρίζεται σαν integer, και εμφανίζεται ως δυαδικός αριθμός.
    • c - το όρισμα μεταχειρίζεται σαν integer, και εμφανίζεται ως χαρακτήρας με τη συγκεκριμένη τιμή ως τιμή ASCII.
    • d - το όρισμα μεταχειρίζεται σαν integer, και εμφανίζεται σαν (προσημασμένος) δεκαδικός αριθμός.
    • u - το όρισμα μεταχειρίζεται σαν integer, και εμφανίζεται σα μη προσημασμένος δεκαδικός αριθμός.
    • f - το όρισμα μεταχειρίζεται σα float, και εμφανίζεται σαν αριθμός κινητής υποδιαστολής.
    • o - το όρισμα μεταχειρίζεται σαν integer, και εμφανίζεται σαν ένας οκταδικός αριθμός.
    • s - το όρισμα μεταχειρίζεται και εμφανίζεται σαν ένα string.
    • x - το όρισμα μεταχειρίζεται σαν integer και παρουσιάζεται σαν ένας δεκαεξαδικός αριθμός (με μικρά γράμματα).
    • X - το όρισμα μεταχειρίζεται σαν integer και παρουσιάζεται σαν ένας δεκαεξαδικός αριθμός (με κεφαλαία γράμματα).

Από την έκδοση 4.0.6 της PHP το string format υποστηρίζει την αρίθμηση και ανταλλαγή των ορισμάτων. Ακολουθεί ένα παράδειγμα:

Example#1 Ανταλλαγή ορισμάτων

<?php
$format 
"There are %d monkeys in the %s";
printf($format,$num,$location);
?>
Το παραπάνω μπορεί να εμφανίσει, "There are 5 monkeys in the tree". Αλλά φανταστείτε ότι δημιουργούμε ένα string format σε ένα άλλο αρχείο, κυρίως γιατί θέλουμε να το κάνουμε διεθνώς αποδεκτό, έτσι το ξαναγράφουμε ως εξής:

Example#2 Ανταλλαγή ορισμάτων

<?php
$format 
"The %s contains %d monkeys";
printf($format,$num,$location);
?>
Τώρα, όμως, έχουμε ένα πρόβλημα. Η σειρά με την οποία εμφανίζονται οι προδιαγραφές μορφοποίησης στο format string δεν ταιριάζει με τη σειρά των ορισμάτων στον κώδικα. Επιθυμητό είναι να αφήσουμε τον κώδικα ως έχει και απλά να δηλώσουμε στον κώδικα σε ποια ορίσματα αναφέρονται οι προδιαγραφείς μορφοποίησης. Θα γράψουμε, λοιπόν, με τον ακόλουθο τρόπο το format string:

Example#3 Ανταλλαγή παραμέτρων

<?php
$format 
"The %2\$s contains %1\$d monkeys";
printf($format,$num,$location);
?>
Ένα πρόσθετο κέρδος είναι ότι μπορείτε να επαναλαμβάνετε τους προδιαγραφείς μορφοποίησης χωρίς την προσθήκη επιπλέον ορισμάτων στον κώδικα. Για παράδειγμα:

Example#4 Αναταλλαγή ορισμάτων

<?php
$format 
"The %2\$s contains %1\$d monkeys.
           That's a nice %2\$s full of %1\$d monkeys."
;
printf($format$num$location);
?>

Ανατρέξτε επίσης στις: printf(), sscanf(), fscanf(), vsprintf(), και number_format().

Παραδείγματα

Example#5 sprintf(): Integers που γεμίζονται με μηδενικά

<?php
$isodate 
sprintf("%04d-%02d-%02d"$year$month$day);
?>

Example#6 sprintf(): δημιουργώντας τιμή νομίσματος

<?php
$money1 
68.75;
$money2 54.35;
$money $money1 $money2;
// echo $money will output "123.1";
$formatted sprintf("%01.2f"$money);
// echo $formatted will output "123.10"
?>