Ricerca inversa di dati in base all'input dell'utente

0

Ho una matrice nel formato:

$array = array(
    0 => array(
        'name' => 'Item 1',
        'level' => 1,
        'points' => 10
    ),
    1 => array(
        'name' => 'Item 1',
        'level' => 2,
        'points' => 12
    ),
    ...
    24 => array(
        'name' => 'Item 1',
        'level' => 25,
        'points' => 100
    ),
    25 => array(
        'name' => 'Item 2',
        'level' => 1,
        'points' => 10
    ),
    26 => array(
        'name' => 'Item 2',
        'level' => 2,
        'points' => 12            
    ),
    ...
    34 => array(
        'name' => 'Item 2',
        'level' => 10,
        'points' => 30            
    ),
    ...
    97 => array(
        'name' => 'Item 10',
        'level' => 1,
        'points' => 14
    ), 
    ...       
    108 => array(
        'name' => 'Item 10',
        'level' => 12,
        'points' => 200
    ),
    ...
    324 => array(...)
);

Da quanto sopra, deduci:

  1. Ogni "elemento" ha livelli diversi, ad esempio "l'elemento 1" ha 24 livelli, ma alcuni elementi possono avere fino a 30 livelli.
  2. I punti non sono incrementali o derivati da una formula (nota).
  3. Ci sono 324 linee "Articoli" totali nei dati di riferimento (18 articoli con livelli diversi).

L'utente inserirà un numero di punti, ad esempio 8000, e questo array di dati deve in qualche modo darmi un elenco di combinazioni di al massimo una di ciascun "Item", ma non necessariamente uno di ogni "Articolo" in cui la somma dei punti per questi "Articoli" si sommano a esattamente 8000 punti.

L'unico modo in cui riesco a pensare è di creare una sorta di tabella arcobaleno con valori in punti per ciascuna combinazione possibile, poiché un tentativo di ricorsione ha fatto perdere memoria alla mia macchina.

Per riferimento, il numero di livelli per i 18 "articoli" (in nessun ordine particolare) è:

30, 25, 20, 15, 1, 1, 3, 1, 3, 20, 25, 30, 30, 30, 30, 30, 20, 10 = 324 livelli.

Non sono sicuro della matematica, ma penso che ci saranno 30 * 25 * 20 ... * 20 * 10 di righe nella tabella, quindi non è sicuro che sia fattibile o possibile.

Come affronterò questo problema per ottenere un risultato (se esiste) che corrisponda ai punti di input dell'utente?

    
posta Kobus Myburgh 21.05.2016 - 21:43
fonte

0 risposte

Leggi altre domande sui tag