J'ai un tableau, par exemple (il peut être quelque chose, mais il est déjà commandé):php le plus proche nombre mineur dans le tableau
array(1,7, 12, 18, 25);
Je dois trouver ce numéro est le plus proche de ce tableau.
Prendre le tableau ci-dessus:
$needle = 11;
Le nombre dans le tableau que je veux récupérer est 7
. Le nombre le plus proche de 11
devrait être 12
, mais je ne veux pas le nombre le plus proche, je veux le nombre le plus proche mineur, si cela a un sens.
Un autre exemple:
- Saisie
26
le numéro récupéré doit être25
- Saisie
1
le numéro récupéré doit être1
- Saisie
6
le numéro récupéré doit être1
- Saisie
7
l'extrait le numéro doit être7
- Saisie
16
le numéro récupéré doit être12
J'ai trouvé une fonction agréable, mais il ne récupère que le nombre le plus proche, et non le nombre le plus proche mineur:
function closestnumber($number, $candidates) {
for($i = 0; $i != sizeof($candidates); $i++) {
$results[$i][0] = abs($candidates[$i] - $number);
$results[$i][1] = $i;
}
sort($results);
$end_result['closest'] = $candidates[$results[0][1]];
$end_result['difference'] = $results[0][0];
return $end_result;
}
$closest = closestnumber(8,array(1,7, 12, 18, 25));
echo "Closest: ".$closest['closest']."<br>";
echo "Difference: ".$closest['difference'];
Merci à l'avance.
Bonne solution générale. '$ last = null' peut être un initialiseur plus approprié. '$ key' n'est pas utilisé ou nécessaire. Une recherche binaire pourrait être plus appropriée si le tableau est grand. – Matthew
Notez que cela nécessite le tri des valeurs dans l'ordre croissant. – Gumbo
Bons points, édités. @Gumbo: Il déclare que le tableau est déjà commandé. – Andre