Dane pobrane do zmiennej $all:

Chcę się dowiedzieć jaka jest najmniejsza wolna wartość playerItemPlace dla danego playerItemBag
Czyli dla playerItemBag=1 jest to 2, dla playerItemBag=2 i playerItemBag=3 jest to 0
Mam taki kod:
$all = $this->db->fetch_assoc("SELECT * FROM {[table]} WHERE playerId=1 AND playerItemBag=1", "playerItems"); $min = 0; $ile = 0; $x = true; while ($x){ $x=false; for ($i=0;$countall>$i;$i++){ if ($all[$i]['playerItemPlace']<=$min){ $min = $all[$i]['playerItemPlace']+1; $x=true; } } $ile++; if ($ile >48){ $x=false; } }
Teoretycznie działa, jednak zawsze wykonuje 48 razy while, a w nim do 48 razy for.
Moje pytanie brzmi jak uprościć ten kod?
Jest on częścią większej ilości kodu wykonywanej, gdy gracz (min. 100 jednocześnie) przekłada przedmioty w ekwipunku. Liczy się każda zaoszczędzona milisekunda.