2010-11-26 6 views
1

Je travaille sur un estimateur de prix, qui sont based on the following array:PHP: Calculer les différences entre les valeurs de tableau?

$items = 7; 

$margins = array(
    1 => 140, // Base price 
    3 => 120, 
    5 => 100, 
    10 => 60); 

En exécutant la ligne suivante, je reçois la valeur la plus proche:

$margin = $margins[max(array_intersect(array_keys($margins),range(0, $items)))]; 

echo $margin; // Outputs 100' 

Cependant, si cette fonction fonctionnerait sur un tableau avec beaucoup d'espace entre chaque valeur, la valeur la plus proche serait vraiment loin de la précédente, ce qui entraîne un prix qui va probablement rendre le client triste ...

Comment puis-je obtenir un résultat plus précis, comme si j'avais rempli manuellement les espaces dans le tableau des marges, pour couvrir toutes les quantités d'objets potentiels (ce qui n'est sûrement pas efficace)?

Merci

+0

Cela ne devrait-il pas être exprimé en utilisant une sorte de calcul impliquant des pourcentages? – deceze

+0

Ce n'est pas un pourcentage constant défini pour ce calcul malheureusement ... – Industrial

+1

@Industrial: Si vous n'avez pas de règle pour créer ces prix, alors nous ne pouvons pas vous aider. Par exemple, vous pourriez dire que le prix diminue linéairement. Ou quadratiquement, ou exponentiellement ... – NikiC

Répondre

0

Vous pouvez obtenir une liste de tous les numéros avec quelque chose comme range(1, 10). Puis boucle à travers et combler les lacunes :)

+0

C'est une façon de faire - mais certainement pas efficace? – Industrial

+0

@Industrial L'efficacité du puits est une chose, mais obtenir une solution de travail en est une autre :) – alex

0

Lorsque vous écrivez 1 => 140, 3 => 120, 5 => 100, 10 => 60 Je suppose que vous voulez dire « entre 5 et 9, chaque article coûte 100 », de sorte que l'achat 7 articles frais 7x100 = 700. Si tel est le cas, vous pouvez simplement parcourir tout le réseau une fois et obtenir le résultat prix par article:

function get_price($prices,$real_qty) 
{ 
    foreach ($prices as $qty => $price) 
    if ($qty <= $real_qty) $real_price = $price; 
    else break; 
    return $real_price * $real_qty; 
} 

Si les prix ont été triés par la quantité (en utilisant ksort, par exemple), cette fonction retourne le le prix total pour la quantité fournie, faisant très peu de travail: au pire, il regarderait chaque élément dans le tableau des prix une fois, et vous avez probablement seulement une douzaine d'articles dans ce tableau. D'autre part, si vous pensez que l'achat de 7 articles devrait coûter quelque chose d'autre que 700, alors vous devez expliquer combien cela devrait coûter et pourquoi, parce que cela n'est pas évident à partir des données du problème.

+0

Salut Victor. Merci pour votre réponse. Ce que je veux, c'est qu'un client ** achète 7 articles ** pour obtenir une marge calculée en fonction de la différence connue au-dessus de la marge actuelle et du niveau ci-dessus, en fonction du nombre d'articles - 7 – Industrial

+1

Écoutez ... vous demandez pour un prix total dans la gamme 420 - 700 sans rien dire sur la façon dont ce prix devrait être choisi (sauf qu'il devrait être dans la fourchette, et apparemment les limites de gamme ne sont pas autorisés). Avez-vous des règles sur la façon dont le prix devrait être choisi, ou voulez-vous que nous établissions des règles? –

+0

Salut à nouveau!Vous ne comprenez pas ce que vous entendez par "limites de portée non autorisées", mais la règle est que le prix doit être interpolé entre les valeurs supérieures et inférieures connues. Est-ce que je me trompe si je veux que le prix diminue de 40% avec 7 articles puis 5 articles? – Industrial

Questions connexes