Page 1 of 1

Convertir de retour d'un WS en donnée organisées.

PostPosted: Thu Mar 07, 2013 4:57 pm
by SHEPSHEP
Salut,

Voila une fonction qui permet de convertir le code dégueulasse (mix de stdclass et de Array) et aléatoire (suivant si le résultat est unique ou multiple) que retourne les WS.

Finis les stdclass imbriqués et les Array Map / Item !!
On récupère des tableaux multidimensionnels plus facilement exploitable.

[code:1:47f476e16c]function wsdl2array($elem){
$arrayParams = array();
if(is_array($elem) || is_object($elem)){
foreach($elem as $line){
if(isset($line->key)){
$key = $line->key;
if(!is_array($line->value) && !is_object($line->value)){
$arrayParams[$key] = trim(strip_tags($line->value));
}
else{
$arrayParams[$key] = wsdl2array($line->value);
}
}
else{
$arrayParams[] = wsdl2array($line);
}
}
}
else{
$arrayParams[] = $elem;
}

return $arrayParams;
}[/code:1:47f476e16c]

++
2ShEp

PostPosted: Fri Mar 08, 2013 11:31 am
by SHEPSHEP
Amélioration de la première function.
Le retour est beaucoup plus propre, les tableaux inutiles étant supprimés.

[code:1:55680b6d24]function wsdl2array($elem){
$arrayParams = array();
if(is_array($elem) || is_object($elem)){
if(is_object($elem) && isset($elem->Map)){
// supprime la class stdClass Map
$elem = $elem->Map;
if(is_array($elem)){
foreach($elem as $k0 => $v0){
$arrayParams[] = wsdl2array2($v0);
}
}elseif(is_object($elem)){
$arrayParams[] = wsdl2array2($elem);
}
}else{

}
}
return $arrayParams;
}

function wsdl2array2($elem){
if(is_object($elem) && isset($elem->item)){
// supprime la class stdClass item
$elem = $elem->item;
foreach($elem as $k1 => $v1){
if(is_object($v1)){
if(is_object($v1->value)){
$t[$v1->key] = wsdl2array($v1->value);
}else{
$t[$v1->key] = $v1->value;
}
}
}
$elem = $t;
}
return $elem;
}[/code:1:55680b6d24]

Reste plus qu'a en faire une belle class mais pas le temps aujourd'hui.

++
2ShEp