Page 1 sur 1

Comparer deux tableaux associatifs et associer les valeurs

Posté : 19 juin 2021, 20:27
par adeveloppeurpro
Hello !

Je viens vous demander conseil. Voici mon code :

Code : Tout sélectionner

if ($monfichier = fopen($urlcsv, 'r')) { $row = 1; $ref = []; // Get REF and QTY to the csv file, associate key value in array while (($ligne = fgetcsv($monfichier, 1000, ";")) !== FALSE) { if (!empty($ligne[2])) { $ref[] = [$ligne[2] => intval($ligne[6])]; } $row++; } // Delete first entrie $refs = array_shift($ref); $product_ref = []; for ($i = 0; $i < count($ref); $i++) { foreach ($db->query("SELECT reference, id_product FROM ps_product WHERE reference = '" . key($ref[$i]) . "' AND id_supplier = '2'") as $row) { $product_ref[] = [$row["reference"] => $row["id_product"]]; } if (in_array($product_ref[$i]["ref"], $ref)) { var_dump($ref[$i]); } } // $product_ref is an array who contain ref and id // get values in array 1 // get values in array 2 // verify if the values in array 1 is in array 2 // add values in array 1 in array 2 $db = null; fclose($monfichier); /*$fichierecriture = fopen("fichier.csv", 'w'); fputs($fichierecriture, $newcontenu); fclose($fichierecriture);*/ }
Vous l'aurez sans doute compris, admettons le tableau un contient : ["ref" => 11651, "qty" => 4]
Le tableau deux : ["ref" => 11651, "id_product" => 35002]

Mon souhait est de faire le tableau : ["ref" => 11651, "id_product" => 35002, "qty" => 4]

J'ai le nez dans le guidon, je ne suis pas objectif. Pouvez vous m'aider s'il vous plaît ? :priere:

(si besoin de plus d'informations, aucun soucis)

Re: Comparer deux tableaux associatifs et associer les valeurs

Posté : 22 juin 2021, 13:59
par kevin254kl
Hello,

Si tu avais un tableau avec comme index la ref ça aurait était plus simple.
Ici pas le choix tu dois parcourir les deux tableaux et avoir un troisième ou tu ajoutes les éléments des deux si même ref.
L'alernative est de faire

Code : Tout sélectionner

$product_ref[$row['reference']
puis dans un second temps parcourir ton autre tableau et pour chaque ref réupérer ce que tu as besoin

Re: Comparer deux tableaux associatifs et associer les valeurs

Posté : 18 juil. 2021, 19:31
par MarYas
Salut je pense qu'un simple array_merge suffit
$a =  ["ref" => 11651, "qty" => 4];
$b = ["ref" => 11651, "id_product" => 35002];
$c = array_merge($a, $b);

print_r($c);

Array ( [ref] => 11651 [qty] => 4 [id_product] => 35002 )

Re: Comparer deux tableaux associatifs et associer les valeurs

Posté : 20 juil. 2021, 14:11
par Shadowwera
Salut je pense qu'un simple array_merge suffit
Le array merge sera la fonction pour fusionner les 2 tableaux, mais avant ça il faut faire une vérification
Car si tu essaye de merge 2 tableaux avec des ref différente, la ref du tableau a sera juste écrasé
$a =  ["ref" => 00000, "qty" => 4];
$b = ["ref" => 11651, "id_product" => 35002];
$c = array_merge($a, $b);

print_r($c); // Affiche :    Array ( [ref] => 11651 [qty] => 4 [id_product] => 35002 )
Il te faudra donc faire quelque chose comme une bouche sur chaque tableau, a la fin garder en mémoire la ref du précédent, et quand la boucle repart de zéro tester la nouvelle ref avec la ref précédent, si identique : array_merge

EDIT : Le problème de ma solution au dessus est que ça ne fonctionnera qui si les 2 tableaux avec la même ref se suivent, donc attention ce n'est pas la solution miracle :non:

Re: Comparer deux tableaux associatifs et associer les valeurs

Posté : 20 juil. 2021, 20:52
par MarYas
Dsl mais selon son exemple et sa demande un merge suffit pr faire son résultat demandé sachant que dans son exemple le ref est identique. Je me doute bien que si par la suite tu rajoutes des conditions 'si' il faut ajuster ton code ;)

Re: Comparer deux tableaux associatifs et associer les valeurs

Posté : 21 juil. 2021, 08:49
par Shadowwera
Si il ne dispose que de 2 tableaux en effet le merge sera suffisant, mais le fait qu'il fasse une requête en BDD laisse sous-entendre qu'il aura une multitude de données ( et donc de tableaux ) et que juste faire un array_merge($array1, $array2) ne sera pas suffisant, d'où ma précision