OVH Cloud OVH Cloud

Convertir un array vers un object

7 réponses
Avatar
NOSPAM_p_genieys
Bonjour,


j'utilise php 4.3, je ne peux pas faire une mise à jour vers une version
plus récente et je n'ai pas le droit d'installer des exstensions à php.

Je souhaite convertir un tableau vers un objet
y a t il une fonction du genre array2object pour faire cela.


Merci de votre aide.

Pierre.


-----
posté via http://www.usenetgratuit.com/ plus de 40 000 newsgroups sur le
web. Pour signaler un abus: abuse@usenetgratuit.com

7 réponses

Avatar
Julian
Pierre Genieys wrote:
Bonjour,


j'utilise php 4.3, je ne peux pas faire une mise à jour vers une version
plus récente et je n'ai pas le droit d'installer des exstensions à php.

Je souhaite convertir un tableau vers un objet
y a t il une fonction du genre array2object pour faire cela.


Merci de votre aide.

Pierre.


-----
posté via http://www.usenetgratuit.com/ plus de 40 000 newsgroups sur le
web. Pour signaler un abus:


But de la manoeuvre ?

--
Julian

Qui s'instruit sans agir, laboure sans semer --proverbe arabe

Avatar
NOSPAM_p_genieys
Julian wrote:


But de la manoeuvre ?


Je souhaite utiliser une fonction qui prend comme argument un
tableau d'objets et je ne peux modifier le comportement de cette
fonction.

Pierre.
-----
posté via http://www.usenetgratuit.com/ plus de 40 000 newsgroups sur le
web. Pour signaler un abus:

Avatar
nico
Tu trouveras si dessous une implémentation de la fonction array2object que
j'ai bricolé en lisant ton post avec une bout de test.
J'espère que ça correspondra à ton besoin.

bonne soirée.

<?php
//*************************
class Dummy{};
function &array2object(&$arr)
{
$ser = '';
$ctr = 0;
foreach($arr as $k => $badcopy)
{
$ser .= serialize($k).serialize(&$arr[$k]);
$ctr++;
}
return unserialize('O:5:"Dummy":'.$ctr.':{'.$ser.'}');
}
//************************* FIN

//test
class tst
{
var $tst;
function tst($val) { $this->tst = $val; }
}
$arr1 = array("p1" => 1, "p2" => "toto", "p3" => new tst(30) );
$o = &array2object($arr1);

echo "<hr/>";
echo $o->p1;
echo "<hr/>";
echo $o->p2;
echo "<hr/>";
var_dump($o->p3);

?>
Avatar
Marc

Je souhaite utiliser une fonction qui prend comme argument un
tableau d'objets et je ne peux modifier le comportement de cette
fonction.


dans ce cas, il suffit que le tableau soir un tableau indexé par
des chaines (hash) :

# non testé

$obj = new StdClass ;
# j'ai oublié le nom de la classse de base
# celle qui est définies par defaut.

foreach ($tab as $key => $val) {
$obj->$key = $val;
}

c pas plus compliqué que ca.

Avatar
Cleo
$obj = new stdClass ;

Juste une petite modif, à la place de:
foreach ($tab as $key => $val) {
$obj->$key = $val;


écrit plutôt:
foreach ($tab as $key => $copy) {
$obj->$key = &$tab[$key];

Ce qui évitera, si $tab référence/contient des objets (et ça a l'air d'être
ton cas), de les cloner.
(rappel: la contrainte est php 4.3.x).

c pas plus compliqué que ca.
ça se complique ... ;)


Avatar
marc.quinton-PAS-DE-
Cleo wrote:
$obj = new stdClass ;

Juste une petite modif, à la place de:

foreach ($tab as $key => $val) {
$obj->$key = $val;



écrit plutôt:
foreach ($tab as $key => $copy) {
$obj->$key = &$tab[$key];

Ce qui évitera, si $tab référence/contient des objets (et ça a l'air d'être
ton cas), de les cloner.
(rappel: la contrainte est php 4.3.x).


c pas plus compliqué que ca.


ça se complique ... ;)


dans le meme genre, il y en a plein ;-)

$obj = & new MaBelleClasse();
function &retourne_reference($foobar);
function une_reference_en_entre($id, &$ref);
# function reference_initialise($id, &$ref = ''); # impossible

plus simplement

$obj1 = & $obj2;

effectivement le foreach est un truc vache, il y a aussi quelque
fonctions de manipulation de liste qui effectue du clonage si mes
souvenirs sont bons.

je me rappelle avoir bien galéré sur une classe Composite qui
avait les methode apply('method', $arg) et aplly_deep();

il était assez difficile de voir ou il y avait eu clonage ou pas
clonage ; enfin je m'en suis sorti et c'est tellement instructif
de galérer.


Avatar
NOSPAM_p_genieys
Cleo wrote:


écrit plutôt:
foreach ($tab as $key => $copy) {
$obj->$key = &$tab[$key];


Merci à vous deux pour cette réponse.

Pierre.
-----
posté via http://www.usenetgratuit.com/ plus de 40 000 newsgroups sur le
web. Pour signaler un abus: