Sie könnten wahrscheinlich eine array_reduce
den Punkten führen die max zu finden, sondern weil array_reduce
Sie die Schlüssel, die iterable Zugriff nicht geben Sie zusätzliche Transformation durchführen müssten.
Stattdessen würde ich empfehlen Ihnen, Ihre eigenen MaxHeap
aufzubauen, indem sich von SplMaxHeap
class MaxHeap extends SplMaxHeap {
public function compare($a, $b) {
if (current($a) < current($b))
return -1;
elseif (current($a) > current($b))
return 1;
else
return 0;
}
}
Dann können wir sie als solche verwendet werden - die Antwort sagt [ 7 => 4 ]
das bedeutet: ist die häufigste Zahl, erscheinen mal
$heap = new MaxHeap();
foreach (array_count_values($numbers) as $n => $count)
$heap->insert([$n => $count]);
print_r($heap->top());
// [ 7 => 4 ]
printf("%d is the most common number, appearing %d times",
key($heap->top()),
current($heap->top())
);
// 7 is the most common number, appearing 4 times
komplettes Skript
$numbers = [0, 1, 1, 1, 2, 3, 4, 4, 5, 6, 7, 7, 7, 7, 8, 8, 9];
class MaxHeap extends SplMaxHeap {
public function compare($a, $b) {
if (current($a) < current($b))
return -1;
elseif (current($a) > current($b))
return 1;
else
return 0;
}
}
$heap = new MaxHeap();
foreach (array_count_values($numbers) as $n => $count)
$heap->insert([$n => $count]);
printf("%d is the most common number, appearing %d times",
key($heap->top()),
current($heap->top())
);
Revisionsgeschichte
ich keine Kenntnis von PHP native array_count_values
Funktion war. Ich entfernte die komplexere array_reduce
zugunsten dieser super spezialisierten Funktion. Danke, @CBroe.
lol ich hatte keine ahnung PHP hatte eine 'array_count_values' Funktion ... Oh PHP, die Überraschungen kommen einfach weiter. Ich habe das 'array_reduce' in meiner Antwort zugunsten dieser eingebauten Funktion entfernt. – naomik