Problème pour fusioner 2 tableaux

ViPHP
AB
ViPHP | 5818 Messages

10 juin 2009, 19:13

Bon alors c'est apparemment résolu...

Quand dans ton précédent topic tu disais que cette méthode allait te "permettre de manipuler un peu les regex", pour avoir fait sensiblement l'équivalent, j'ai eu envie de te répondre que ça allait surtout t'apprendre la manipulation des tableaux.

Je vois que c'est bien parti dans ce sens :wink:

Pour le reste le code résultant sera difficilement réutilisable et peu évolutif (imagine que tu veuilles ensuite ajouter une recherche sur le texte...) mais pour sûr c'est un bon exercice.

EDIT : Alors le temps que je poste ce n'est plus résolu ?

Mammouth du PHP | 531 Messages

10 juin 2009, 19:27

Tu as raison finalement c'est plutôt une histoire de tableau que de regex.

non c'est plus résolu en fait :D
Je crois que la solution n'est pas loin ceci dit, celle de zeux était presque la bonne. Un truc m'échappe dans cette histoire.

Pourtant j'ai très bien en tête ce que devrais être le tableau final :

(
[0] => ( [ID_PAGE] => valeur, [LIBELLE] => valeur )
[1] => ( [ID_PAGE] => valeur, [LIBELLE] => valeur )
)

Mais je sais pas, les tableaux de départs sont assez byzar pour le coup

ViPHP
AB
ViPHP | 5818 Messages

10 juin 2009, 21:26

Alors un truc comme ça peut-être
<?php
$a = array
(
0 => 'ID_PAGE',
1 => 'LIBELLE',
2 => 'ID_PAGE',
3 => 'LIBELLE',
4 => 'ID_PAGE',
5 => 'LIBELLE'
);

$b = array
(
0 => '13456',
1 => 'test 1',
2 => '23456',
3 => 'test 2',
4 => '33456',
5 => 'test 3',
);

$result = array();
$i = 0;
foreach ($a as $key => $value) {

	if (isset($result[$i]) && array_key_exists($value,$result[$i])) 
		
		$result[++$i][$value] = $b[$key]; 
		
		else
		
		$result[$i][$value] = $b[$key];
}
echo '<pre>';
print_r($result);
echo '</pre>';

/*Affiche :
Array
(
    [0] => Array
        (
            [ID_PAGE] => 13456
            [LIBELLE] => test 1
        )

    [1] => Array
        (
            [ID_PAGE] => 23456
            [LIBELLE] => test 2
        )

    [2] => Array
        (
            [ID_PAGE] => 33456
            [LIBELLE] => test 3
        )

)
*/
?>
Enfin bon ce qui compte aussi c'est de partir avec des tableaux cohérents dès le départ et là la base me paraît un peu risquée.

Mammouth du PHP | 531 Messages

10 juin 2009, 22:27

Bon sang ça me parait logique maintenant que je vois ton code !

J'avais essayer de faire un test similaire mais j'étais coincé par ce que j'avais imaginé que array_key_exist() ne pouvait se faire que sur un tableau entier et non sur une clé précise du tableau.

Pour les tableaux de départ ils sont crades mais ça vient peut être du fait qu'il ne faudrait pas faire un preg_match_all mais plutot d'essayer de trouver les balises ligne par lignes un peu commen dans cette source que j'ai du mal à piger : http://www.phpsources.org/scripts172-PHP.htm

ViPHP
AB
ViPHP | 5818 Messages

10 juin 2009, 22:43

Bah disons que le risque pour que cela fonctionne toujours correctement est qu'il faut que tes tableaux $a et $b soient par exemple toujours de même longueur ...

Alors ce topic sur ce cas précis de tableaux est résolu ?

Mammouth du PHP | 531 Messages

10 juin 2009, 22:50

ah oui effectivement pour la longueur du tableau, bien vu :wink:

Logiquement dans les fichiers sources le nombre de balise sera cohérent quitte à avoir des balises vides

C'est résolu, merci de votre aide à tous :D
Et la c'était facile encore, maintenant si je mpose la question de comment remplacer le contenu d'une balise particulière dans le fichier source, je ne vois pour l'instant pas d'autres solution que de parser tout le contenu, ajouter un éléme,nt au tableau et réécrire le fichier. En terme de performance ça doit être bof moyen non ?
Je ne sais pas comment ça se passe du coté des lib XML mais si ça se trouve c'est la seule solution ?

ViPHP
AB
ViPHP | 5818 Messages

10 juin 2009, 23:31

ah oui effectivement pour la longueur du tableau, bien vu :wink:

Logiquement dans les fichiers sources le nombre de balise sera cohérent quitte à avoir des balises vides

C'est résolu, merci de votre aide à tous :D
Et la c'était facile encore, maintenant si je mpose la question de comment remplacer le contenu d'une balise particulière dans le fichier source, je ne vois pour l'instant pas d'autres solution que de parser tout le contenu, ajouter un éléme,nt au tableau et réécrire le fichier. En terme de performance ça doit être bof moyen non ?
Je ne sais pas comment ça se passe du coté des lib XML mais si ça se trouve c'est la seule solution ?
Alors si c'est résolu n'oublies pas de cliquer sur le bouton "résolu" :)

Pour le reste, on t'avais bien dit que le plus efficace est d'utiliser une bdd puisque les bdd sont spécialement conçues pour gérer des données sous forme tabulaire avec des performances et des fonctions qui vont bien :wink:

ViPHP
AB
ViPHP | 5818 Messages

11 juin 2009, 00:52

Ah oui j'oubliais, si malgré tout tu veux persister dans la direction d'utiliser des fichiers textes (bien que cette solution soit moins facilement évolutive, moins robuste, très souvent moins performante et toujours plus difficile à mettre en oeuvre), n'oublies pas qu'il peut être intéressant que ces fichiers textes soient composés de tableaux serialisés...
Modifié en dernier par AB le 11 juin 2009, 15:04, modifié 1 fois.

Mammouth du PHP | 531 Messages

11 juin 2009, 08:27

Ah oui j'oubliais, si malgré tout tu veux persister dans la direction d'utiliser des fichiers textes (bien que cette solution soit moins facilement évolutive, moins robuste, très souvent moins performante et toujours plus difficile à lettre en oeuvre), n'oublies pas qu'il peut être intéressant que ces fichiers textes soient composés de tableaux serialisés...
Oui c'est sur que la serialisation facilite pas mal les choses. Beaucoups plus simple que de baliser le contenu ça c'est clair. Pourquoi pas après tout :roll: