Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : String Functions : vsprintf

vsprintf

Return a formatted string (PHP 4 >= 4.0.7, PHP 5)
string vsprintf ( string format, array args )


Code Examples / Notes » vsprintf

drm

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 Language


Follow Navioo On Twitter
addcslashes
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
print
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
eXTReMe Tracker