<?php
class ExtendedSPLHeap extends \SPLHeap {
protected function compare($a, $b) {
if ($a->latitude == $b->latitude) {
return 0;
}
return ($a->latitude < $b->latitude) ? -1 : 1;
}
}
$citiesHeap = new \ExtendedSPLHeap();
$file = new \SplFileObject("cities.csv");
$file->setFlags(SplFileObject::DROP_NEW_LINE | SplFileObject::SKIP_EMPTY);
while (!$file->eof()) {
$cityData = $file->fgetcsv();
if ($cityData !== NULL) {
$city = new \StdClass;
$city->name = $cityData[0];
$city->latitude = $cityData[1];
$city->longitude = $cityData[2];
$citiesHeap->insert($city);
}
}
echo 'There are ', $citiesHeap->count(), ' cities in the heap', PHP_EOL;
echo 'FROM NORTH TO SOUTH', PHP_EOL;
$citiesHeap->top();
while ($citiesHeap->valid()) {
$city = $citiesHeap->current();
echo sprintf(
"%-20s %+3.4f %+3.4f" . PHP_EOL,
$city->name,
$city->latitude,
$city->longitude
);
$citiesHeap->next();
}
echo 'There are ', $citiesHeap->count(), ' cities in the heap', PHP_EOL;
preferences:
47.5 ms | 402 KiB | 5 Q