You are here: Re: [PHP] sprintf and arrays. « PHP « IT news, forums, messages
Re: [PHP] sprintf and arrays.

Posted by Brent Baisley on 04/06/05 18:40

For one, you are missing a right parenthesis ) in all of your examples.
htmlentities( sprintf( $tmp[0], $s, ENT_QUOTES )

Second, the string you are trying to format only has one variable
argument: $s.
Fred likes %1$s on his %2$s
You have it numbered for ordering, but you are still ordering one
variable. I never used sprintf like that, so I'm not sure if that is a
valid way of doing it. That may be what is giving you the too few
arguments error. Typically you would do something like:
Fred likes %1$s on his %2$t
If you are using sprintf in a valid manner, then the problem is
probably in the $s argument of the sprintf function. You are only
specifying one variable to replace when you are looking to do two
replacements. The contents of $s is a single string that happens to
contains commas, it does not get evaluated as multiple arguments just
because it contains commas. Try wrapping $s in eval().
htmlentities( sprintf( $tmp[0], eval($s) ), ENT_QUOTES);

Personally, I rolled my own basic search and replace string function to
support my own templating "tag" system. I still use sprinf for more
"fancy" stuff, but for basic stuff, I rolled my own. A simplified
version is below. It accepts an associative array and a string as
parameters and returns the merged result.

$text_str = "And example for {::Name::} in answer to {::Question::} on
the {::ListName::}. Hope it helps {::Name::}!";
$data_Merge['Name'] = "Duncan Hill";
$data_Merge['Question'] = "sprintf and arrays";
$data_Merge['ListName'] = "PHP General";
echo mergeTplData($data_Merge, $text_str);

function mergeTplData($data, $str) {
$searchTags = array_keys($data);
$searchTags = '{::'.implode('::},{::',$searchTags).'::}';
$searchTags = explode(',',$searchTags);
$str = str_replace($searchTags,$data,$str);
return $str;
}

On Apr 6, 2005, at 7:23 AM, Duncan Hill wrote:

> I have a snippet of code that looks something like:
> if (is_array($p_sub_values)) {
> foreach ($p_sub_values as $i => $v) {
> $p_sub_values_str[$i] = "'$v'";
> }
> $s = join(',', $p_sub_values_str);
> $r = htmlentities(sprintf($tmp[0], $s, ENT_QUOTES);
> }
>
> $tmp[0] in this case contains a string like 'Fred likes %1$s on his
> %2$s',
> taking advantage of positional substitution with sprintf.
>
> The function call to this snippet can have an optional array passed.
> My
> need/desire is to substitute each element of the array into the
> appropriate
> position with sprintf. So far I've tried:
> $r = htmlentities(sprintf($tmp[0], $s, ENT_QUOTES);
> $r = htmlentities(sprintf($tmp[0], ${$s}, ENT_QUOTES);
>
> and a few other bits and pieces, all to no avail (error is about not
> enough
> arguments).
>
> Is there any way to accomplish this in PHP, or do I need to roll my own
> substitution code? The array can obviously be anything from a single
> value
> to 'unlimited' (though in practice will probably be less than 5).
>
> --
> My mind not only wanders, it sometimes leaves completely.
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
--
Brent Baisley
Systems Architect
Landover Associates, Inc.
Search & Advisory Services for Advanced Technology Environments
p: 212.759.6400/800.759.0577

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация