- getFData (Php&JS) : Ajout d'une possibilité de découpage de la valeur de remplacement

This commit is contained in:
Benjamin Renard 2008-10-27 14:06:49 +00:00
parent d63d161a5e
commit ba78f51681
2 changed files with 90 additions and 15 deletions

View file

@ -39,6 +39,7 @@
*/ */
function getFData($format,$data,$meth=NULL) { function getFData($format,$data,$meth=NULL) {
$unique=false; $unique=false;
$expr="%{([A-Za-z0-9]+)(\:(-?[0-9])+)?(\:(-?[0-9])+)?}";
if(!is_array($format)) { if(!is_array($format)) {
$format=array($format); $format=array($format);
$unique=true; $unique=true;
@ -46,17 +47,42 @@ function getFData($format,$data,$meth=NULL) {
for($i=0;$i<count($format);$i++) { for($i=0;$i<count($format);$i++) {
if(is_array($data)) { if(is_array($data)) {
if ($meth==NULL) { if ($meth==NULL) {
while (ereg("%{([A-Za-z0-9]+)}",$format[$i],$ch)) { while (ereg($expr,$format[$i],$ch)) {
$format[$i]=ereg_replace($ch[0],$data[$ch[1]],$format[$i]); if($ch[3]) {
if ($ch[5]) {
$s=$ch[3];
$l=$ch[5];
}
else {
$s=0;
$l=$ch[3];
}
$val=substr((string)$data[$ch[1]],$s,$l);
}
else {
$val=$data[$ch[1]];
}
$format[$i]=ereg_replace($ch[0],$val,$format[$i]);
} }
} }
else { else {
while (ereg("%{([A-Za-z0-9]+)}",$format[$i],$ch)) { while (ereg($expr,$format[$i],$ch)) {
if (method_exists($data[$ch[1]],$meth)) { if (method_exists($data[$ch[1]],$meth)) {
$value = $data[$ch[1]] -> $meth(); $value = $data[$ch[1]] -> $meth();
if (is_array($value)) { if (is_array($value)) {
$value = $value[0]; $value = $value[0];
} }
if($ch[3]) {
if ($ch[5]) {
$s=$ch[3];
$l=$ch[5];
}
else {
$s=0;
$l=$ch[3];
}
$value=substr((string)$value,$s,$l);
}
$format[$i]=ereg_replace($ch[0],$value,$format[$i]); $format[$i]=ereg_replace($ch[0],$value,$format[$i]);
} }
else { else {
@ -68,16 +94,42 @@ function getFData($format,$data,$meth=NULL) {
} }
else { else {
if ($meth==NULL) { if ($meth==NULL) {
while (ereg("%{([A-Za-z0-9]+)}",$format[$i],$ch)) while (ereg($expr,$format[$i],$ch)) {
$format[$i]=ereg_replace($ch[0],$data,$format[$i]); if($ch[3]) {
if ($ch[5]) {
$s=$ch[3];
$l=$ch[5];
}
else {
$s=0;
$l=$ch[3];
}
$val=substr((string)$data,$s,$l);
}
else {
$val=$data;
}
$format[$i]=ereg_replace($ch[0],$val,$format[$i]);
}
} }
else { else {
while (ereg("%{([A-Za-z0-9]+)}",$format[$i],$ch)) { while (ereg($expr,$format[$i],$ch)) {
if (method_exists($data,$meth)) { if (method_exists($data,$meth)) {
$value = $data -> $meth($ch[1]); $value = $data -> $meth($ch[1]);
if (is_array($value)) { if (is_array($value)) {
$value = $value[0]; $value = $value[0];
} }
if($ch[3]) {
if ($ch[5]) {
$s=$ch[3];
$l=$ch[5];
}
else {
$s=0;
$l=$ch[3];
}
$value=substr((string)$value,$s,$l);
}
$format[$i]=ereg_replace($ch[0],$value,$format[$i]); $format[$i]=ereg_replace($ch[0],$value,$format[$i]);
} }
else { else {

View file

@ -34,17 +34,29 @@ function LSdebug() {
* @retval string La chaine formatée * @retval string La chaine formatée
*/ */
function getFData(format,data,meth) { function getFData(format,data,meth) {
var getMotif = new RegExp('%\{([A-Za-z0-9]+)\}'); var getMotif = new RegExp('%\{(([A-Za-z0-9]+)(\:(-?[0-9])+)?(\:(-?[0-9])+)?)\}');
var find=1; var find=1;
var val="";
if(($type(data)=='object') || ($type(data)=='array')) { if(($type(data)=='object') || ($type(data)=='array')) {
if ($type(data[meth])!='function') { if ($type(data[meth])!='function') {
while (find) { while (find) {
var ch = getMotif.exec(format); var ch = getMotif.exec(format);
if ($type(ch)) { if ($type(ch)) {
format=format.replace ( if($type(ch[4])) {
new RegExp('%\{'+ch[1]+'\}'), if ($type(ch[6])) {
data[ch[1]] var s=ch[4];
); var l=ch[6];
}
else {
var s=0;
var l=ch[4];
}
var val=data[ch[2]].substr(s,l);
}
else {
val=data[ch[2]];
}
format=format.replace(new RegExp('%\{'+ch[1]+'\}'),val);
} }
else { else {
find=0; find=0;
@ -56,14 +68,25 @@ function getFData(format,data,meth) {
var ch = getMotif.exec(format); var ch = getMotif.exec(format);
if ($type(ch)) { if ($type(ch)) {
try { try {
format=format.replace ( val=data[meth](ch[2]);
new RegExp('%\{'+ch[1]+'\}'),
data[meth](ch[1])
);
} }
catch(e) { catch(e) {
return; return;
} }
if($type(ch[4])) {
if ($type(ch[6])) {
var s=ch[4];
var l=ch[6];
}
else {
var s=0;
var l=ch[4];
}
val=val.substr(s,l);
}
format=format.replace(new RegExp('%\{'+ch[1]+'\}'),val);
} }
else { else {
find=0; find=0;