Comparer deux tableaux associatifs et associer les valeurs

adeveloppeurpro
Invité n'ayant pas de compte PHPfrance

19 juin 2021, 20:27

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)

Eléphant du PHP | 354 Messages

22 juin 2021, 13:59

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

Eléphanteau du PHP | 19 Messages

18 juil. 2021, 19:31

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 )

Avatar du membre
Eléphant du PHP | 70 Messages

20 juil. 2021, 14:11

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:
" La révolution informatique fait gagner un temps fou aux Hommes, mais ils le passent avec leur ordinateur ! " by Khalil Assala

Eléphanteau du PHP | 19 Messages

20 juil. 2021, 20:52

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 ;)

Avatar du membre
Eléphant du PHP | 70 Messages

21 juil. 2021, 08:49

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
" La révolution informatique fait gagner un temps fou aux Hommes, mais ils le passent avec leur ordinateur ! " by Khalil Assala