Brauche einen Denkanstoß für ein PHP script
Geizhals » Forum » Programmierung » Brauche einen Denkanstoß für ein PHP script (22 Beiträge, 382 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
Brauche einen Denkanstoß für ein PHP script
23.04.2014, 13:55:35
Hallo!

Wie würdet ihr folgendes Problem am elegantesten lösen?

Ich habe ein Array mit beliebig vielen Items:

$array[0]['quality'] = 105
$array[0]['cost'] = 40

$array[1]['quality'] = 153
$array[1]['cost'] = 18

$array[2]['quality'] = 120
$array[2]['cost'] = 35
... usw ...

Weiters habe ich 2 Variablen:
$wallet
$max_items

Was ich nun brauche ist folgendes:

$max_items ist z.B. 6, das heißt dass man MAXIMAL 6 items haben kann aus dem Array, aber eben auch weniger.
$wallet ist z.B. 200. Das ist der verfügbare Betrag mit dem man items "kaufen" kann. Jedes item hat unterschiedliche Kosten ('cost').

Ich will für den verfügbaren Betrag in $wallet die best mögliche Qualität an X items kaufen (wobei X hier $max_items ist, also z.B. 6, aber auch weniger). Es kann also auch vorkommen dass (wieder bei $max_items 6) man sich 5 items leisten kann (z.B. einfach die 5 items mit der besten 'quality'), aber dass 4 items mit der besten 'quality' + 2 items mit geringerer 'quality' (und geringere 'cost') in Summe eine höhere 'quality' hat.

Ich hoffe ich habe mich verständlich ausgedrückt :-)

Als Beispiel mit $max_items = 6 und $wallet = 200:

('quality'/'cost') ... (höhere 'quality' muss nicht zwingend höhere 'cost' heißen):

Item 1: 300/40
Item 2: 275/35
Item 3: 250/30
Item 4: 225/30
Item 5: 200/45
Item 6: 175/30
Item 7: 150/35
Item 8: 125/23
Item 9: 100/25

Wenn man jetzt einfach die items mit der besten 'quality' nehmen würde, käme man auf folgende Summe bei 'quality' und 'cost':
(Item 1 + Item 2 + Item 3 + Item 4 + Item5)
'quality': 300+275+250+225+200 = 1250
'cost': 40+35+30+30+45 = 180
Ein weiteres item würde sich nicht mehr ausgehen da schon 180 von 200 aus $wallet benutzt worden sind.

Wenn man aber auf Item 5 verzichtet und stattdessen Item 6 und Item 7 wählt kommt man in Summe auf eine höhere 'quality' und hat max_items = 6 auch nicht überschritten:
(Item 1 + Item 2 + Item 3 + Item 4 + Item 6 + Item 7)
'quality': 300+275+250+225+175+150 = 1375
'cost': 40+35+30+30+30+35 = 200

Habe mich schon mit dem Array herumgespielt (max, sum, sort, mit schleifen, etc.), aber so wirklich komm ich nicht dahinter wie das script alle Bedingungen berücksichtig :-/ :-)

Antworten PM Übersicht Chronologisch
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung