Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[debutant] combiner deux tableaux sans doublons ?

1 réponse
Avatar
julien.gautier
Bonjour à tous,


encore une question surement triviale...

Je m'essaie à l'utilisation des sessions, et je bute sur la manipulation
des variables de session... ou plutôt sur la manipulation des tableaux :
je cherche à combiner 2 tableaux (associatifs, je crois) en éliminant
les éventuels doublons.



Voilà le cas :

1 - je récupère les paramètres transmis par $_GET, (sauf le 1er) que je
place dans un tableau ainsi :

$select_tab = array_slice($_GET, 1);

2 - ensuite, je souhaite enregistrer ce tableau comme variable de
session de l'utilisateur; j'écris donc ceci :

$_SESSION['sess_select_tab'] = $select_tab;


Je crois que jusque là ça va (non ?).

Mais en fait, il se peut que l'opération ait déjà eu lieu précédemment
et donc que $_SESSION['sess_select_tab'] soit déjà définie.
Dans ce cas, je souhaite que les nouvelles données (contenues dans
$select_tab) soient ajoutées aux précédentes, SI elles n'y sont pas déjà
(donc éviter tout doublon).

Alors je tente ceci entre 1 et 2 :

if (isset($_SESSION['sess_select_tab']))
{

// compare le tableau de session au nouveau tableau

$sess_oldTab = $_SESSION['sess_select_tab'];
$tab_diff = array_diff_assoc($select_tab,$sess_oldTab);
$sess_oldTab[] = $tab_diff;
$select_tab = $sess_oldTab;
}


Mais là, j'ai un problème : la fonction "array_diff_assoc" n'existe pas
sur mon PHP 4.2.2...

D'où deux questions :

- si j'avais PHP > 4.3, est-ce que mon code est correct et
fonctionnerait ?

- comment obtenir la même chose avec PHP 4.x ?


Précision : il y a doublon dès qu'une valeur de la 2e colonne d'un des
tableaux (me fais-je ben comprendre ?) se trouve aussi dans la 2e
colonne de l'autre tableau;

par ex. :

tableau 1 :

file1 -> monfichier1
file2 -> monfichier4
file3 -> monfichierZZ

tableau 2 :

file1 -> monfichier2
file2 -> monfichierZZ
file3 ->monfichier5


Je considère que "monfichierZZ" est en double.
Je veux obtenir un 3e tableau, réunissant les 2 premiers :

tableau 3 :

file1 -> monfichier1
file2 -> monfichier4
file3 -> monfichierZZ
file4 -> monfichier2
file5 -> monfichier5

Merci pour votre aide patiente !

1 réponse

Avatar
Dorian
Julien Gautier wrote:

[snip]

Alors je tente ceci entre 1 et 2 :

if (isset($_SESSION['sess_select_tab']))
{

// compare le tableau de session au nouveau tableau

$sess_oldTab = $_SESSION['sess_select_tab'];
$tab_diff = array_diff_assoc($select_tab,$sess_oldTab);
$sess_oldTab[] = $tab_diff;
$select_tab = $sess_oldTab;
}


Ou plus simple :
$_SESSION['sess_select_tab'] = $_SESSION['sess_select_tab'] + $select_tab;

Oui, l'opérateur + existe pour les tableaux.

- si j'avais PHP > 4.3, est-ce que mon code est correct et
fonctionnerait ?


Par rapport a l'exemple que tu donnes plus bas ca n'a pas grand chose a
voir. Dans ton code tu vérifies si les clés des tableaux sont en doubles et
dans ton exemple il faut vérifier les valeurs. Alors pouquoi utiliser
array_diff_assoc au lieu de array_diff ?