2017-05-05 4 views
1

Grundsätzlich i-Arrays innerhalb eines mehrdimensionalen Arrays vergleichen wollen, Deshalb möchte ich alle vergleichen mit etc Kategorie 1 gegeneinander, Kategorie 2 gegen earch andere etc etc.Vergleich Arrays innerhalb mehrdimensionales Array

Also, was ich wirklich tun möchte, ist:

mit dieser Formel jede Kategorie gegeneinander vergleichen

versus - gewonnen = x

und dann herausfinden, wer die niedrigste Zahl hat und dann updat e der letzte Überlebende aus jeder Kategorie in der Datenbank (Die Gewinner)

Irgendwelche Ideen, wie ich das am besten lösen kann?

$arr; 
$stmt = $dbCon->prepare(" SELECT versus, won, imgId, category FROM rating_versus "); 
    $stmt->execute(); 
    $stmt->bind_result($versus, $won, $imgId, $category); 
    while ($stmt->fetch()) { 
     $arr[] = array('category' => $category, 'id' => $imgId, 'versus' => $versus, 'won' => $won); 
//  echo $imgId . "<br> Versus: " . $versus . "<br> Won: " . $won . "<br> <br>"; 
    } 
$stmt->close(); 

Dies wird Ausgang so etwas wie dieses

array(9) { 
[0]=> array(4) { ["category"]=> int(1) ["id"]=> int(1) ["versus"]=> int(42) ["won"]=> int(21) } 
[1]=> array(4) { ["category"]=> int(1) ["id"]=> int(5) ["versus"]=> int(47) ["won"]=> int(24) } 
[2]=> array(4) { ["category"]=> int(1) ["id"]=> int(13) ["versus"]=> int(47) ["won"]=> int(23) } 
[3]=> array(4) { ["category"]=> int(2) ["id"]=> int(2) ["versus"]=> int(45) ["won"]=> int(19) } 
[4]=> array(4) { ["category"]=> int(2) ["id"]=> int(4) ["versus"]=> int(49) ["won"]=> int(25) } 
[5]=> array(4) { ["category"]=> int(2) ["id"]=> int(7) ["versus"]=> int(44) ["won"]=> int(25) } 
[6]=> array(4) { ["category"]=> int(3) ["id"]=> int(3) ["versus"]=> int(47) ["won"]=> int(29) } 
[7]=> array(4) { ["category"]=> int(3) ["id"]=> int(6) ["versus"]=> int(50) ["won"]=> int(18) } 
[8]=> array(4) { ["category"]=> int(3) ["id"]=> int(9) ["versus"]=> int(45) ["won"]=> int(24) } 
} 
+0

Sie erwartet werden, um zu versuchen den Code selbst zu ** ** zu schreiben. Nach [** mehr Forschung **] (https://meta.stackoverflow.com/q/261592/1011527) Wenn Sie ein Problem haben ** posten Sie, was Sie versucht haben ** mit einer ** klaren Erklärung von was funktioniert nicht ** und bietet [ein minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve). Lesen Sie [Wie Sie fragen] (http://stackoverflow.com/help/how-to-ask) eine gute Frage. Achten Sie darauf, [die Tour zu besuchen] (http://stackoverflow.com/tour) und lesen [this] (https://meta.stackoverflow.com/q/347937/1011527). –

+0

Das Problem ist, ich kann nichts zu diesem Thema finden, alles ist über zwei Arrays oder Vergleich zweier unterschiedlicher Multidimensional-Arrays und nichts wie die Art, wie ich es versuche :) so ein Zeiger würde sehr hilfreich sein, da ich nicht weiß, wohin ich gehe mit diesem –

+0

Also ich kämpfe mit wie die Logik mit einem Problem wie diesem gelöst ist –

Antwort

0

den Gewinner zu finden, brauchen Sie nicht eins nach dem anderen zu beseitigen, die die niedrigste Punktzahl hat.

Gewinner ist, wer die höchste Punktzahl hat.

So sollte Ihr Code wie

$arr; $stmt = $dbCon->prepare(" SELECT versus, won, imgId, category FROM rating_versus "); 
$stmt->execute(); 
$stmt->bind_result($versus, $won, $imgId, $category); 
$winners=array(); 
while ($stmt->fetch()) { 
    $arr[] = array('category' => $category, 'id' => $imgId, 'versus' => $versus, 'won' => $won); 
    if(isset($winners[$category])) { 
      $curmax = $winners[$category]['won']; 
      if($won>$curmax) { 
       $winners[$category] = array('id'=>$imgId, 'won' => $won); 
      } 
    } else { 
     $winners[$category] = array('id'=>$imgId, 'won' => $won); 
    } 
//  echo $imgId . "<br> Versus: " . $versus . "<br> Won: " . $won . "<br> <br>"; 
} 
$stmt->close(); 
print_r($winners); 

folgende sein Dies sollte für diesen Fall arbeiten

+0

@ iiiml0sto1 Ich habe nicht klar verstanden, aber wenn Sie die ID mit dem niedrigsten Ergebnis für jede Kategorie finden möchten, dann werde ich den Code aktualisieren . Ist es das, was du brauchst? –

+0

Hmm, weil einige vielleicht mehr votet als der Rest, also um es gerecht zu machen, muss ich mit einer Lösung kommen .. aber ich werde das zu jeder Lösung ändern, mit der ich kommen kann. Aber danke für das Zeigen, wie man ein logisches Problem so löst, macht es viel Sinn, ein Array zu machen und es zu aktualisieren, wenn die Daten größer sind als die Daten im Array :) –

+0

Nein, alles in Ordnung, tut es nicht machen, um die niedrigste Punktzahl zu finden, es wörtlich machen Sie es alle fair sowieso :) –