Comparer deux tableaux associatifs et associer les valeurs

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Comparer deux tableaux associatifs et associer les valeurs

Re: Comparer deux tableaux associatifs et associer les valeurs

par Shadowwera » 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

Re: Comparer deux tableaux associatifs et associer les valeurs

par MarYas » 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 ;)

Re: Comparer deux tableaux associatifs et associer les valeurs

par Shadowwera » 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:

Re: Comparer deux tableaux associatifs et associer les valeurs

par MarYas » 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 )

Re: Comparer deux tableaux associatifs et associer les valeurs

par kevin254kl » 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

Comparer deux tableaux associatifs et associer les valeurs

par adeveloppeurpro » 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)