- 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) {
$unique=false;
$expr="%{([A-Za-z0-9]+)(\:(-?[0-9])+)?(\:(-?[0-9])+)?}";
if(!is_array($format)) {
$format=array($format);
$unique=true;
@ -46,17 +47,42 @@ function getFData($format,$data,$meth=NULL) {
for($i=0;$i<count($format);$i++) {
if(is_array($data)) {
if ($meth==NULL) {
while (ereg("%{([A-Za-z0-9]+)}",$format[$i],$ch)) {
$format[$i]=ereg_replace($ch[0],$data[$ch[1]],$format[$i]);
while (ereg($expr,$format[$i],$ch)) {
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 {
while (ereg("%{([A-Za-z0-9]+)}",$format[$i],$ch)) {
while (ereg($expr,$format[$i],$ch)) {
if (method_exists($data[$ch[1]],$meth)) {
$value = $data[$ch[1]] -> $meth();
if (is_array($value)) {
$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]);
}
else {
@ -68,16 +94,42 @@ function getFData($format,$data,$meth=NULL) {
}
else {
if ($meth==NULL) {
while (ereg("%{([A-Za-z0-9]+)}",$format[$i],$ch))
$format[$i]=ereg_replace($ch[0],$data,$format[$i]);
while (ereg($expr,$format[$i],$ch)) {
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 {
while (ereg("%{([A-Za-z0-9]+)}",$format[$i],$ch)) {
while (ereg($expr,$format[$i],$ch)) {
if (method_exists($data,$meth)) {
$value = $data -> $meth($ch[1]);
if (is_array($value)) {
$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]);
}
else {

View file

@ -34,17 +34,29 @@ function LSdebug() {
* @retval string La chaine formatée
*/
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 val="";
if(($type(data)=='object') || ($type(data)=='array')) {
if ($type(data[meth])!='function') {
while (find) {
var ch = getMotif.exec(format);
if ($type(ch)) {
format=format.replace (
new RegExp('%\{'+ch[1]+'\}'),
data[ch[1]]
);
if($type(ch[4])) {
if ($type(ch[6])) {
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 {
find=0;
@ -56,14 +68,25 @@ function getFData(format,data,meth) {
var ch = getMotif.exec(format);
if ($type(ch)) {
try {
format=format.replace (
new RegExp('%\{'+ch[1]+'\}'),
data[meth](ch[1])
);
val=data[meth](ch[2]);
}
catch(e) {
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 {
find=0;