Array_unique

coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 - 18 janv. 2006 à 15:18
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 - 26 janv. 2006 à 11:13
Bonjour!
J'ai un tableau à plusieurs dimensions.. Il s'agit d'informations sur des photos:dossier, id de la photo. J'aimerais enlever les doublons mais si j'utilise array_unique, ben il ne me reste qu'une image par dossier. Moi j'aimerais enlever quand le dossier ET l'id sont les mêmes. Y a t il une fonction qui fait ca? Dois-je crée une chaîne où je concatène le dossier et l'id? Autre méthode?

Merci!

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"

8 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 janv. 2006 à 17:23
Hello,

on peut voir la structure de ton tableau stp ?
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
18 janv. 2006 à 19:19
Je le crée comme ceci:
while( ( $row = mysql_fetch_assoc( $sql_result ) ) !== false )
$_SESSION['search_in_pictures_results'][$i++] = $row;

Et, dans l'ordre des indices:
id, galerie_nom, galerie_dossier

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
19 janv. 2006 à 09:19
donc ça donne genre
$_SESSION['search_in_pictures_result'][0] = id1
$_SESSION['search_in_pictures_result'][1] = galerie_nom1
$_SESSION['search_in_pictures_result'][2] = galerie_dossier1

?

Pas cool lol...
c'eut été plus simple, je pense, en indexant avec un tableau
$_SESSION['search_in_pictures_result'][0] = array ('id' => id1, 'galerie_nom' => galerie_nom1, 'galerie_dossier' => galerie_dossier1)

Hmm...bon à 1ère vue, ça va être compliqué. Va sans doute falloir faire un truc du genre créer un nouveau tableau, indexé avec les indexs de tes id par exemple, dans lequel tu concatènes id et galerie_dossier.
Puis tu le dédoublonnes avec array_unique ()
Puis il te reste à virer les clef, clef +1, clef + 2 de ta session, ou tu ne trouves pas la clef dans le tableau créé.
Heu...c'est compréhensible ?
Là à froid de bon matin, je ne trouve rien de plus simple.
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
19 janv. 2006 à 14:19
"

donc ça donne genre
$_SESSION['search_in_pictures_result'][0] = id1
$_SESSION['search_in_pictures_result'][1] = galerie_nom1
$_SESSION['search_in_pictures_result'][2] = galerie_dossier1

?"

Pas du tout :)
$_SESSION['...'][0] = array( $key1 => $val1, $key2 => $val2, $key3 => $val3 );
$_SESSION['...'][1] = array( $key1 => $val1, $key2 => $val2, $key3 => $val3 );

etc...
puisqu'il fait un while() sur un fetch_assoc(), ca retourne bien quelque chose comme ca :
while ( $data = mysql_fetch_assoc($requete) ) {
// $data est bien un array genre : array ( 'id' => 1, 'truc' => 'machin' );
// Donc si il fait :
$_SESSION['...'][$i] = $data;
$i++;
}

//ca devrait être bon pour indexer le tableau.
Enfin chui malade, j'ai peut etre compris de travers !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
19 janv. 2006 à 14:50
Wow exact, t'es malade, mais t'as mieux lu que moi ;-)

Dans ce cas, pour dédoublonner...hmmm...
J'ai pas la tête à ça lol :-(
je trouve que des trucs à la con : pour chaque clef numérique (donc en parcourant ton tableau), tu fais un array_keys avec comme search_value, ton $val1 et ton $val2, si les deux renvoie qque chose, tu vires la clef courante (puisque c'est l'entrée avec laquelle tu cherches), et tu vires toutes les autres.
Je m'explique mal, suis désolé, mais j'ai chaud et je suis débordé lol...
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
19 janv. 2006 à 19:38
Salut à vous!
Sinon, je concatène les deux ( id & info gallerie ), je classe par ordre croissant... Je parcours et je supprime, avec un truc, genre:

$i = 1;
$tot = nombre d'éléments du tableau
$courant = $_SESSION['...'][0][0]

while( $i < $tot )
{
if( $_SESSION['...'][$i] == $courant )
on supprime $_SESSION['...'][$i][0]
else
$courant = $_SESSION['...'][$i][0]

$i++;
}

Z'en pensez quoi?
Merci!

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
23 janv. 2006 à 11:18
UP! :)

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
coockiesch Messages postés 2268 Date d'inscription mercredi 27 novembre 2002 Statut Membre Dernière intervention 13 septembre 2013 4
26 janv. 2006 à 11:13
Salut!
Alors voilà ce que j'ai fait... C'est bourrin et si vous avez mieux, c'est volontiers mais en attendant... :)

// récupération des données
while( ( $row = mysql_fetch_assoc( $sql_result ) ) !== false )
$temp_array[$i++] = $row;

// tri des données
usort( $temp_array, "comparer_imgs" );

// copie de la première ligne
$_SESSION['search_in_pictures_results'][0] = $temp_array[0];

$new_array_id = 0;
for( $j = 1; $j < $i; $j++ )
{
// si enregistrement différent, on copie dans le tableau final
if( $temp_array[$j]['id'] != $_SESSION['search_in_pictures_results'][$new_array_id]['id'] || $temp_array[$j]['galerie_id'] != $_SESSION['search_in_pictures_results'][$new_array_id]['galerie_id'] )
$_SESSION['search_in_pictures_results'][++$new_array_id] = $temp_array[$j];
}

// nombre de résultats
$_SESSION['search_in_pictures_nbresults'] = $new_array_id + 1;

// libération de la mémoire
unset( $temp_array );
mysql_free_result( $sql_result );

Avec aussi:
function comparer_imgs($array_a, $array_b)
{
$galerie_id = strcmp( $array_a['galerie_id'], $array_b['galerie_id'] );
$img_id = strcmp( $array_a['id'], $array_b['id'] );

if( !$galerie_id && !$img_id )
return 0;

if( !$galerie_id )
return $img_id;

return $galerie_id;
}

Voilà!

@++

R@f

www.allpotes.ch: Photos, humour, vidéos, gags, ...

"On dit que seulement 10 personnes au monde comprenaient Einstein. Personne ne me comprends. Suis-je un génie???"
0
Rejoignez-nous