NiCoS Posté 20 Juillet 2006 Posté 20 Juillet 2006 Hello, Je récupère des données dans 2 bases distinctes que je matche et je veux créé un 3eme tableau contant juste les référentiels de chaque tableau commun. Je pensais avoir trouvé la solution avec array_push() mais y a un truc qui coince : sql_connect($dc_server,$dc_user,$dc_pass,$dc_db); $query = "SELECT cat_id, cat_libelle FROM " . $dc_prefix . "categorie ORDER BY cat_ord ASC"; sql_query($query); $dc_cat = $query_result; sql_close(); sql_connect($drupal_server,$drupal_user,$drupal_pass,$drupal_db); $query = "SELECT tid, name FROM " . $drupal_prefix . "term_data ORDER BY tid ASC"; sql_query($query); $drupal_cat = $query_result; $new_dc = array( 0 => 0); while($dc_array = mysql_fetch_array($dc_cat, MYSQL_NUM)) { echo $dc_array[1] . '<br />'; $drupal_array = mysql_fetch_array($drupal_cat, MYSQL_NUM); foreach($drupal_array as $drupal => $values) { if ($values == $dc_array[1]) { echo 'well done ! : ' . $dc_array[1] . ' - ' . $dc_array[0] . ' - ' . $drupal_array[0] . '<br />'; } } } array_push($dc_new, $dc_array[0] => $drupal_array[0]) me renvoie une erreur sur la présence du => J'obtiens un truc du genre : Ma Viewell done ! : Ma Vie - 10 - 1Humeurs & réflexionswell done ! : Humeurs & réflexions - 3 - 2CVwell done ! : CV - 2 - 3Projetswell done ! : Projets - 13 - 4Dev Webwell done ! : Dev Web - 19 - 5CMSwell done ! : CMS - 18 - 6Libritudeswell done ! : Libritudes - 8 - 7WWW, NTIC & Cowell done ! : WWW, NTIC & Co - 7 - 8Loisirswell done ! : Loisirs - 5 - 9Fourre-toutwell done ! : Fourre-tout - 6 - 10En Vracwell done ! : En Vrac - 20 - 11Vie des siteswell done ! : Vie des sites - 21 - 12 Je voudrais avoir un tableau qui fait en fait : array(dc_array[0] => $drupal_array[0],dc_array[0] => $drupal_array[0],dc_array[0] => $drupal_array[0]) pour avoir : array(5 => 9,6 => 10,...21 => 12); et avoir ainsi mon mapping. Qqn peut m'aider ?
NiCoS Posté 20 Juillet 2006 Auteur Posté 20 Juillet 2006 Effectivement array_combine() sur le papier semble vouloir faire ce que je veux... Je regarde ça demain dans le train
NiCoS Posté 21 Juillet 2006 Auteur Posté 21 Juillet 2006 Le problème dans mon cas est que le tableau ne contient que les dernières lignes de chaque tableau... A voir comment je peux m'en dépatouiller... :-/
TheRec Posté 21 Juillet 2006 Posté 21 Juillet 2006 Bonjour, Pour obtenir le tableau final que tu souhaites j'utiliserais la création d'index automatiques (bref quand tu donne un index qui n'existe pas PHP crée cet index... s'il existe déjà la valeur que tu lui attribue remplace la précédente). Dans la condition vérifiant si le nom de la catégorie Drupal est égal à celle de DC (donc où tu affiche "well done! ...") j'utiliserais ce code : $new_dc[$dc_array[0]] = $drupal_array[0]; Ah et pour créer ton tableau $new_dc je n'ai pas bien compris pourquoi tu mettais l'élément avec l'index "0" à la valeur 0 :S Je ne comprends pas non plus l'utilité de ta boucle foreach... vu que tu connais les clés des tableaux dans lesquelles se trouvent les id des catégories (dc_array[0] et $drupal_array[0]). Mais peut-être ai-je mal compris ton problème ? :S
NiCoS Posté 21 Juillet 2006 Auteur Posté 21 Juillet 2006 Pour le $new_dc(0 =>0), c'était pour faire tricher honteusement - c'est enlevé depuis car c'est pas acceptable comme solution. L'idée de ce bout de code c'est : 1/ Parcourir le résultat d'une requetete SQL 2/ Pour chaque résultat, je le compare avec le résultat d'une seconde requete SQL pour définir si j'ai un mapping qui se fait ou pas l'étape 3, que je cherche à obtenir, c'est d'avoir un tableau qui me donne pour un id de mon tableau DC, la valeur dans mon tableau drupal...
TheRec Posté 21 Juillet 2006 Posté 21 Juillet 2006 Ok.. Donc j'avais bien compris. Ce que je ne comprends pas c'est que ton foreach va analyser une ligne de ta table de Drupal à chaque itération de ta boucle while. Mais imaginons que ta table de Drupal ne soit pas "alignée" sur la table de DC, ta condition ne sera jamais vérifiée :S Il faudrait vérifier toutes les valeurs de la table de Drupal à chaque itération de la boucle while. Cela représente une grosse charge s'il s'agit de grandes quantités de données. Sinon ce que je t'ai dit reste valable... J'aurais écrit ce code ainsi : <?phpsql_connect($dc_server,$dc_user,$dc_pass,$dc_db);$query = "SELECT cat_id, cat_libelle FROM " . $dc_prefix . "categorie ORDER BY cat_ord ASC";sql_query($query);$dc_cat = $query_result;sql_close();sql_connect($drupal_server,$drupal_user,$drupal_pass,$drupal_db);$query = "SELECT tid, name FROM " . $drupal_prefix . "term_data ORDER BY tid ASC";sql_query($query);$drupal_cat = $query_result;// Stocker le tableau qui sera utilisé à chaque fois...c'est plus sain que de refaire le requête à chaque itération$drupal_array = array();while($drupal_row = mysql_fetch_array($drupal_cat, MYSQL_NUM)) { $drupal_array[$drupal_row[0]] = $drupal_row[1]; // La forme id => name ... on aurait aussi pu stocker un tableau, mais pourquoi charger la mémoire :/}$new_dc = array();while($dc_array = mysql_fetch_array($dc_cat, MYSQL_NUM)) { $category_match = array_search($dc_array[1],$drupal_array); // Ici tu fais une recherche du nom de la catégorie DC dans le tableau drupal, s'il y a correspondance la réponse de array search sera l'id de la catégorie. if($category_match !== false) { $new_dc[$dc_array[0]] = $category_match; } else { // Ici tu peux traîter d'un cas ou il n'y aurait pas de correspondance pour une catégorie de la table DC }}echo "<pre>"; print_r($new_dc); echo "</pre>"; ?> (Je n'ai rien testé... j'ai écrit ça à la volée :S, mais l'idée est là... il y a sûrement d'autres moyens de faire)
NiCoS Posté 21 Juillet 2006 Auteur Posté 21 Juillet 2006 Ok, je regarde et te réponds ce soir ou demain Merci de t'être penché dessus !
NiCoS Posté 21 Juillet 2006 Auteur Posté 21 Juillet 2006 C'était tout à fait ça, nickel chrome, sans la moindre erreur... Merci beaucoup !!
TheRec Posté 21 Juillet 2006 Posté 21 Juillet 2006 De rien ! Toutefois comme je te l'ai dit, ce n'est peut-être pas la solution la plus performante, donc si c'est pour un usage intensif il faudra peut-être se pencher plus longuement sur le problème À en lire ton blog, il s'agit plutôt d'une tâche qui serait réalisée qu'occasionnellement donc à toi de voir si tu souhaites vraiment passer plus de temps à chercher la solution la plus performante
NiCoS Posté 22 Juillet 2006 Auteur Posté 22 Juillet 2006 Nan, pour le coup, je veux juste un truc qui marche, il ne s'inscrit pas en effet dans la durée ce développement...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant