On 4/7/07, The Editor <[EMAIL PROTECTED]> wrote:Hi all!...2) I'm still trying 
to make it more configurable by setting a fewvariables like the following as 
SDV variables.  But can't figure outhow to get the $vars to substitute with 
their value when used in thefunction.  Here's a repost of my question on the 
topic yesterday.> SDV($ZAPorderrows, '<tr><td> nowrap>$itemname </td><td><input 
type=text size=4> name=$itemlabel value=$itemqty> onblur=calculate()> 
at</td><td> align=right>$itemprice </td><td><input type=text size=7> 
name=$itemlabel value=$itemcost onblur=calculate()> 
onFocus=blur()></td></tr>');>> Then somewhere in the markup for the form I want 
to be able to do> something like this (within a foreach loop):>> $orderrows .= 
$ZAPorderrows;>> However I need to be able to replace the variables like 
$itemname and> $itemlabel with their current value at that time.  I can't seem 
to get> the right combination of ' " etc to make this work.  Can someone> 
suggest something?Cheers,DanHi Dan, Your intuition is apparently bugging you, 
like this: there must be a way to invoke "string $var substitutions" on a 
string-variable, not just on literal strings. Well the closest thing (AFAIK) is 
strtr() (http://www.php.net/manual/en/function.strtr.php). However, since 
you're performance conscious, I did some experimenting just to see how various 
alternatives would fare. See the code below. It turns out that str_replace 
outruns everything by far. Strtr() is 4 times slower(!) and using eval() to 
invoke "string $var substitutions" is 7..8x slower. Patrick at some point 
probably did the same profiling. A similar problem occurs in FmtPageName(), he 
uses:    $fmt = str_replace(array_keys($g),array_values($g),$fmt);
Which is also your best bet. -Keep that mindstorm going!/jmps On the topic of 
the formula to calculate shipping etc: you could possibly output it directly 
from the cart markup, custom made. ============================<?php 
$EnableStopWatch=1;function StopWatch($x) {   global $StopWatch, 
$EnableStopWatch;  if (!$EnableStopWatch) return;  static $wstart = 0, $ustart 
= 0;  list($usec,$sec) = explode(' ',microtime());  $wtime = ($sec+$usec);   if 
(!$wstart) $wstart = $wtime;  if ($EnableStopWatch != 2)     { $StopWatch[] = 
sprintf("%05.2f %s", $wtime-$wstart, $x); return; }  $dat = getrusage();  
$utime = ($dat['ru_utime.tv_sec']+$dat['ru_utime.tv_usec']/1000000);  if 
(!$ustart) $ustart=$utime;  $StopWatch[] =     sprintf("%05.2f %05.2f %s", 
$wtime-$wstart, $utime-$ustart, $x);}function Expand(){  global $StopWatch;  
$g=array('itemname'=>'Easter Egg', 'itemprice'=>'7,00', 'itemqty'=>'12', 
'itemlabel'=>'Customer Delusion', 'itemcost'=>'2 pennies');  $fmtrep='<tr><td> 
nowrap>$itemname </td><td><input type=text size=4> name=$itemlabel 
value=$itemqty> onblur=calculate()> at</td><td> align=right>$itemprice 
</td><td><input type=text size=7> name=$itemlabel value=$itemcost 
onblur=calculate()> onFocus=blur()></td></tr>';  $fmtrep2='<tr><td> 
nowrap>$itemname </td><td><input type=text size=4> name=$itemlabel 
value=$itemqty> onblur=calculate()> at</td><td> align=right>$itemprice 
</td><td><input type=text size=7> name=$itemlabel value=$itemcost 
onblur=calculate()> onFocus=blur()></td></tr>';  $fmteval='return "<tr><td> 
nowrap>$$g[itemname] </td><td><input type=text size=4> name=$$g[itemlabel] 
value=$$g[itemqty]> onblur=calculate()> at</td><td> align=right>$$g[itemprice] 
</td><td><input type=text size=7> name=$$g[itemlabel] value=$$g[itemcost] 
onblur=calculate()> onFocus=blur()></td></tr>";';  $fmteval2='return "<tr><td> 
nowrap>$$itemname </td><td><input type=text size=4> name=$$itemlabel 
value=$$itemqty> onblur=calculate()> at</td><td> align=right>$$itemprice 
</td><td><input type=text size=7> name=$$itemlabel value=$$itemcost 
onblur=calculate()> onFocus=blur()></td></tr>";';  foreach($g as $k=>$v)     
$$k=$v;    StopWatch('STREPLACE');  for($i=0;$i<100000;$i++)     $fmt1 = 
str_replace(array_keys($g),array_values($g),$fmtrep);  StopWatch('STRTR');    
for($i=0;$i<100000;$i++)     $fmt1b = strtr($fmtrep2,$g);  
StopWatch('EVALARR');    for($i=0;$i<100000;$i++)     $fmt2 = eval($fmteval);  
StopWatch('EVALVARS');    for($i=0;$i<100000;$i++)     $fmt2b = 
eval($fmteval2);  StopWatch('END');    if($fmt1!=$fmt1b)     
print"FAILED\n\nREP =$fmt1\n\nTR  =$fmt1b";  if($fmt1!=$fmt2)     
print"FAILED\n\nREP =$fmt1\n\nEVALARR=$fmt2";  if($fmt1!=$fmt2b)     
print"FAILED\n\nREP =$fmt1\n\nEVALVARS=$fmt2b";  
print_r($StopWatch);}Expand();exit;
_________________________________________________________________
Your friends are close to you. Keep them that way.
http://spaces.live.com/signup.aspx
_______________________________________________
pmwiki-devel mailing list
[email protected]
http://www.pmichaud.com/mailman/listinfo/pmwiki-devel

Reply via email to