Système d'allocation de message

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 : Système d'allocation de message

Re: Système d'allocation de message

par xTG » 08 avr. 2014, 17:34

Euh... Tu ne nous montres pas tout le code mais déjà ce que tu nous montres n'a aucun lien avec le résultat que tu veux obtenir...
Pourquoi utiliser un rand() si les pourcentages d'attribution sont déjà connus ?
$donnees_a_partager = array(1,2,3,4,5,6,...);
$pourcentages_employes = array( // la somme doit faire 1
   'Bob' => 0.142,
   'Sam' => 0.214,
   'Tom' => 0.286,
   'John' => 0.357
);

shuffle($donnees_a_partager); / on mélanges les données (utile ou non suivant ce que tu veux)
$nbre_donnees_total = size($donnees_a_partager);

foreach($pourcentages_employes as $employe => $pourcentage_employe)
{
  $nbr_donnees_employe = floor($nbre_donnees_total * $pourcentage_employe);
  echo $employe . "prend les donnees : ";
  while($nbr_donnees_employe > 0)
  {
     echo array_pop($donnees_a_partager);
     $nbr_donnees_employe--;
  }
}
Code non testé.
Le principe est là, après il est à optimiser car je crois que je perds une donnée dans certains cas à cause du floor() (il faut donc gérer une image de nbr_donnees_total qu'on décrémente pour la comparer à 0 à la fin).

Système d'allocation de message

par Kimou13 » 08 avr. 2014, 10:30

Bonjour,

Code : Tout sélectionner

Je gère un système d'allocations de messages clients qui se veut équitable en fonction de l'ancienneté des employés. Par exemple, Bob doit recevoir 14% des messages, Sam 21%, Tom 29% et John 36% (Bob étant le plus ancien, John le plus jeune). Le seul moyen que j'ai trouvé jusqu'à maintenant est d'arrondir ces chiffres de manière à trouver un dénominateur le plus faible possible puis d'utiliser une fonction rand dans mon script php (ci-dessous). Par exemple ici, Bob recevra aléatoirement 2 tickets sur 14 (14,2%), Sam 3 tickets sur 14 (21,4%), Tom 4 tickets sur 14 (28,6%) et John 5 tickets sur 14 (35,7%). Les problèmes étant que: - le code est lourd (il est en réalité plus long que l'exemple ci-dessous) - le système d'allocation n'est pas parfait et nécessite parfois des arrondis grossiers - si nous souhaitons revoir les pourcentages d'allocation toutes les semaines ou tous les mois, c'est un vrai travail que de devoir trouver un dénominateur le plus faible possible et de remodifier le code. Connaissez-vous une méthode qui me permettrait d'allouer un pourcentage de messages à chaque employé, plutôt qu'un système peu précis et complexe comme le mien ? Merci d'avance, [u][b]Code:[/b][/u] [php]foreach ($messages->results as &$result) { if (!$result->assignee_id) { switch (rand(1,14)) { case 1: $assignee = "111"; // Bob break; case 2: $assignee = "111"; // Bob case 3: $assignee = "112"; // Sam break; case 4: $assignee = "112"; // Sam break; case 5: $assignee = "112"; // Sam break; case 6: $assignee = "113"; // Tom break; case 7: $assignee = "113"; // Tom break; case 8: $assignee = "113"; // Tom break; case 9: $assignee = "113"; // Tom break; case 10: $assignee = "114"; // John break; case 11: $assignee = "114"; // John break; case 12: $assignee = "114"; // John break; case 13: $assignee = "114"; // John break; case 14: $assignee = "114"; // John break; }[/php]