Fusion de deux tableau

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fusion de deux tableau

Re: Fusion de deux tableau

par devcphp » 23 oct. 2009, 20:20

exactement Fab !

Pour @rthur, j'ai testé avec succes ta solution et j'ai terminé par :
$aKeys = array ( 'sType','sServeur');
           
$iFile_Xml = new RecursiveIteratorIterator ( new SimpleXMLIterator('toto.xml',null,true) );
foreach ($iFile_Xml as $sValeur){
       
        $sTableau[] = $sValeur;
}
$aArray = array_combine( $aKeys, $sTableau);

foreach ($aArray as $sClef=>$sValeur){
    $$sClef = $sValeur;
}
Le sujet est resolue , je ne pense pas qu'on puisse faire mieux tant qu'un iterateur se parcourt comme un tableau mais n'en soit pas un .

Merci à tous.

Re: Fusion de deux tableau

par @rthur » 23 oct. 2009, 19:24

Ok, j'ai compris...
Je propose un truc du genre alors :
$tableau1 = array ( "valeur1", "valeur2");
$tableau2 = array ( "valeurt 1" , "valeurt 2"); // ou tableau 2 est un iterateur

$tableaufinal=array();
$i=0;
foreach($tableau1 as $null) {
     $nouvo_tableau[$tableau1[$i]]=$tableau2[$i];
     $i++;
}

print_r($tableaufinal); // array ( 'valeur1'=>'valeurt1', 'valeur2'=>'valeurt2');
A toi de l'adapter pour que ça marche avec ton iterateur

Re: Fusion de deux tableau

par fab » 23 oct. 2009, 16:17

Sauf que array-combine n'a pas l'air de considérer les itérateurs comme des array.

Re: Fusion de deux tableau

par devcphp » 23 oct. 2009, 15:51

Merci Fab

je sais que c'est un objet mais étant donné que c'etait un iterateur et qu'on le parcourt avec un foreach tel un tableau , ca pouvait marché .c'est d'ailleurs pour ca que je forçais le typage avec un (array).

Pour @rthur:

en sortie je veux ca :

tableaufinal = array ( 'valeur1'=>'valeurt1',
'valeur2'=>'valeurt2');

Ainsi , il me suffira de parcourir ce tableau afin d'assigner mes variables :

foreach (tableau final as $sClef=>$sValeur){
$sClef = $sValeur;
}

et le tour est joué.

Merci

Re: Fusion de deux tableau

par fab » 23 oct. 2009, 15:25

$iFile_xml c'est un objet est pas un tableau

Re: Fusion de deux tableau

par @rthur » 23 oct. 2009, 15:24

Ok donc ça c'est ce que tu as en entrée :
mon but étant bien précis :

tableau 1 = arrray ( valeur 1, valeur 2);

tableau 2 = array ( valeurt 1 , valeurt 2); // ou tableau 2 est un iterateur

les deux tableau ont forcement le meme nombre de valeurs.
Mais en sortie, tu veux obtenir quoi?

Re: Fusion de deux tableau

par devcphp » 23 oct. 2009, 14:34

Deja un grand merci à tous pour vos suggestions.

Extract ne m'est d'aucune utilité dans mon cas , mon but étant bien précis :

tableau 1 = arrray ( valeur 1, valeur 2);

tableau 2 = array ( valeurt 1 , valeurt 2); // ou tableau 2 est un iterateur

les deux tableau ont forcement le meme nombre de valeurs.

Grave à vous j'ai compris qu'il fallait passé par la réation d'un tableau numero 3 et apres lecture de la doc c'est bien la fonction array_combine qu'il me faut.

et voici le code :

$aKeys = array ( 'sType','sServeur');
	   
$iFile_Xml = new RecursiveIteratorIterator ( new SimpleXMLIterator('toto.xml',null,true) );

$aArray = array_combine( $aKeys,$iFile_Xml);

foreach ($aArray as $sClef=>$sValeur){
	
	$$sClef = $sValeur;
}


probleme, php me jette en disant que mon iterateur n'est pas un object .J'ai essayé de forcer en rajoutant (array) $iFile_Xml.

Php me jette sur la boucle foreach en me disant
array_combine() expects parameter 2 to be array, object given in ...
[23-Oct-2009 14:22:49] PHP Warning: Invalid argument supplied for foreach(


je vais continué à chercher mais j'ai plus beaucoup d'idées

Re: Fusion de deux tableau

par fab » 23 oct. 2009, 11:45

Hum sinon il peut faire ce qu'il veut rapidement et sans gouffres de perfs avec la fonction http://fr.php.net/extract non?

Re: Fusion de deux tableau

par naholyr » 23 oct. 2009, 11:24

Avant d'aller au bout de ton idée, essaie déjà de te poser la question de savoir si tu as *vraiment* besoin de définir des variables dynamiques... La réponse est toujours non, et en plus c'est un gouffre à performances et à maintenance.

Donc, supposons que tu vas plutôt garder une notion de tableau associatif :) ça ne change rien au fond du problème, pour parcourir deux tableaux en parallèle :
$tableau1 = array('a', 'b', 'c');
$tableau2 = array('A', 'B');
$valeurs = array();
foreach ($tableau2 as $i => $k)
{
  $valeurs[$k] = $tableau1[$i];
}
Donc si ton itérateur est bien construit, tu dois pouvoir faire la même chose :
$nodes = array();
foreach ($aMyArray as $i => $var)
{
  $nodes[$var] = $iFile_Xml[$i];
}

Re: Fusion de deux tableau

par @rthur » 23 oct. 2009, 08:07

Bonjour,

Aurais-tu un exemple concret de ce que tu as en entrée et de ce que tu veux obtenir au final?

Fusion de deux tableau

par devcphp » 22 oct. 2009, 20:31

Bonjour,

J'ai recupéré le contenu d'un fichier xml sous la forme d'un iterateur.
$iFile_Xml = new RecursiveIteratorIterator ( new SimpleXMLIterator('TOTO.xml',null,true) );
nous sommes d'accord qu'un iterateur est parcourable l'aide d'une boucle foreach , c'est donc un tableau.

J'ai maintenant un deuxieme tableau
$aMyArray = array ('sKey1', 'sKey2');

ce deuxieme tableau me servirait à definir des variables tal que :

$sKey1 = le premier noeud de mon fichier xml

DONC EN CONCLUSION , je souhaite recuperer les valeurs de mon premier tableau pour les faires correspondre dans le meme ordre aux elements composant mon tableau (iterateur).

en effet, deux boucles foreach imbriqués n'ont rien donné.

D'avance merci