|
vsprintf
Return a formatted string
(PHP 4 >= 4.0.7, PHP 5)
Code Examples / Notes » vsprintfdrm
When combining with func_get_args as above, you might want to consider using array_shift: <? function someFunc () { $args = func_get_args (); $format = array_shift ( $args ); // do something return vsprintf ( $format, $args ); } ?> keeps it clean ;) jed
vsprintf() accepts arrays with any keys, so the array_shift() technique is unnecessary when writing a printf-type function. Any parameters you require are easily unset from the array you retrieve with func_get_args(): <?php function mysprintf($format) { $args = func_get_args(); unset($args[0]); /* get rid of "$format" */ return vsprintf($format, $args); } /* I use this technique in production code as follows: */ function logf($target, $string) { $args = func_get_args(); unset($args[0], $args[1]); fprintf($GLOBALS['config']['logtargets'][$target], "[%s] %s\n", date('H:i'), wordwrap(vsprintf($string, $args), 75, '\n\r ')); } /* e.g.: logf(DEBUG, "Oops! %s", mysql_error()); */ ?> array_shift() and other costly array operations aren't required, as far as I know. I could be wrong. jon
This can be used for quick and dirty internationalization: <?php $GLOBALS['strings']['example'] = "There are %d people."; // Loads a phrase from the translations list in lang/$lang/phrases.php function t() { $args = func_get_args(); $nArgs = func_num_args(); $phrase = array_shift($args); $nArgs--; include_once("../lang/" . lang() . "/phrases.php"); if (isset($GLOBALS['strings'][$phrase])) { return vsprintf($GLOBALS['strings'][$phrase], $args); } else { return '<span style="color: #ff0000">Untranslated string: ' . $phrase . '</span>'; } } ?> tbs dot p dot a dot m
Simple but useful routine: <?php function vsprintf_iter($fmt,$data) { if (!is_array($data)) return false; $ret = ''; foreach ($data as $d) { $ret .= vsprintf($fmt,$d); } return $ret; } ?> roadster
Please note: The same functionality (sortof) can be attained between version 4.0.4 and 4.1.0 using call_user_func_array. Example: call_user_func_array("sprintf", $arg) First element of $arg is the format. This rescued me in a situation where version 4.1.0 wasn't available. iisys_
I've made this simple function for more compatibility with different applications. As arguments, it can accept an array or single arguments. <?php function asprintf() { $a = func_get_args(); $format = array_shift($a); if (is_array($a[0])) { $a = $a[0]; } return vsprintf($format, $a); } # Examples. $sql_arguments = array('fields' => '*', 'table' => 'users', 'field' => 'user', 'value' => 'exploited'); echo asprintf("SELECT %s FROM %s WHERE %s = '%s'", $sql_arguments); # Would output: SELECT * FROM users WHERE user = 'exploited' echo asprintf("SELECT %s FROM %s WHERE %s = '%s'", '*', 'users', 'user', 'exploited'); # Would output the same. ?> samvisenospam
i wrote a short function that make use of vsprintf. It is useful in first coding/debugging of php scripts, because it is called like a simple printf and it display in italic (you can change it of course ;-) ) every debug messages, making it easy to remove them when your code is ready. here goes : <?php function printd() { $debug_array=func_get_args(); $debug_numargs=func_num_args(); $debug_fmt=$debug_array[0]; for ( $i = 0 ; $i < $debug_numargs ; $i++ ) $debug_array[$i] = $debug_array[$i+1]; $debug_text=vsprintf($debug_fmt, $debug_array); printf("--> debug <i>%s</i>\n", $debug_text); } ?> toneee
I found this function to be useful for formatting sql queries. I do something like this: function sql_build($template, $params = array()) { global $sql_templates; if (isset($sql_templates[$template])) { $sql = vsprintf($sql_templates[$template], $params); return $sql; } return false; } // Fetch list of contacts, for a given section id $sql_templates['contacts_by_section'] = <<<ENDSQL select id, name, email, address, photo_id from contacts where section_id = %d ENDSQL; You also give yourself an added layer of security on the sql due to the sprintf formatting. For example, using %d will not allow any sql injection for that parameter. |
Change Languageaddcslashes addslashes bin2hex chop chr chunk_split convert_cyr_string convert_uudecode convert_uuencode count_chars crc32 crypt echo explode fprintf get_html_translation_table hebrev hebrevc html_entity_decode htmlentities htmlspecialchars_decode htmlspecialchars implode join levenshtein localeconv ltrim md5_file md5 metaphone money_format nl_langinfo nl2br number_format ord parse_str printf quoted_printable_decode quotemeta rtrim setlocale sha1_file sha1 similar_text soundex sprintf sscanf str_getcsv str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count strcasecmp strchr strcmp strcoll strcspn strip_tags stripcslashes stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk strpos strrchr strrev strripos strrpos strspn strstr strtok strtolower strtoupper strtr substr_compare substr_count substr_replace substr trim ucfirst ucwords vfprintf vprintf vsprintf wordwrap |