Ich habe ein Array, das so aussieht:

Array
    (
        [id] => 12
        [team_home_id] => 50
        [team_away_id] => 63
        [score_team_home] => 1
        [score_team_away] => 1
        [league_id] => 3
        [home_win_pred] => 50
        [draw_pred] => 26
        [away_win_pred] => 24
    )

Jetzt ת möchte ich von 3 Schlüsseln (den 3 Vorhersagen: home_win_pred, draw_pred, away_win_pred) schauen, welcher der höchste ist, und dann diesen Schlüssel zurückgeben.

Ich dachte, der von mir verwendete Code funktioniert, aber er scheint einen anderen Schlüssel zurückzugeben, wenn irgendwo anders im Array ein doppelter Wert vorhanden ist. Im obigen Beispiel wird also team_home_id zurückgegeben, da dies auch 50 als der höchste Wert in meiner 3 ist.

Der Code, den ich benutze:

array_search(max($arr[$x]['home_win_pred'], $arr[$x]['draw_pred'], $arr[$x]['away_win_pred']), $arr[$x]);

Für das obige Beispielarray wird team_home_id anstelle von home_win_pred zurückgegeben.

Wie kann ich das beheben?

2
Awesom-o 20 Jän. 2019 im 18:43

3 Antworten

Beste Antwort

Warum nicht eine einfache for-Schleife verwenden:

$arr = array("team_home_id" => 50, "home_win_pred" => 50, "draw_pred" => 26, "away_win_pred" => 24);

$fields = array('home_win_pred','draw_pred','away_win_pred'); //field you want to loop over
$k = array_shift($fields); //take the first field
$max = $arr[$k]; // set the first value as max
foreach($fields as $filed) {
    if ($arr[$filed] > $max) { // if found a new max updated max an field
        $max = $arr[$filed];
        $k = $filed;
    }
}

Nun $k, wenn das höchste Feld: home_win_pred

1
dWinder 20 Jän. 2019 im 15:52

Warum Sie dieses Ergebnis erhalten:

array_search - Durchsucht das Array nach einem bestimmten Wert und gibt bei Erfolg den ersten entsprechenden Schlüssel zurück.

In Ihrem Code

max($arr[$x]['home_win_pred'], $arr[$x]['draw_pred'], $arr[$x]['away_win_pred'])

Geben Sie 50 zurück und das erste Vorkommen von 50 ist bei Schlüssel team_home_id.

0
GabrieleMartini 20 Jän. 2019 im 15:58

Hier ist eine Option, die sich dem Problem nähert, indem das Array formal nur auf die interessierenden Schlüssel gesetzt wird. Anschließend wird mit array_keys() nach Schlüsseln mit dem Maximalwert gesucht.

$keys = array('home_win_pred', 'draw_pred', 'away_win_pred');
$subset = array_intersect_key($arr, array_flip($keys));
$maxs = array_keys($subset, max($subset));

print_r($maxs);  // could be more than one key here

Array
(
    [0] => home_win_pred
)

Beachten Sie, dass dadurch mehrere Schlüssel der drei interessierenden Schlüssel zurückgegeben werden, falls für den höchsten Wert ein Gleichstand besteht.

0
Tim Biegeleisen 20 Jän. 2019 im 16:00