Close search

Hack book of Hoa\Heap

Unfortunately, the documentation of this library has not been written yet. However, the file may contain enough information to help you. This document is an extract of the file.
Sorry for this inconvenience. Be ensured we are working hard to fix this.

Help on IRC Help on Gitter Documentation Board

This library provides a set of advanced Heap can support Scalar, Array, Object or Closure as item and not only Integer, as ordinal does. The order of heap depends of priority parameter.

Hoa\Heap\Min and Hoa\Heap\Max class interpret priority by comparing items numerically. But you are free to implement your own class if you want a different sort algorithm.

:warning: Warning

The default iteration process do not dequeue the Heap as common usage. You must use Generator methods top or pop for iterate on with remove item from heap.

Quick usage

As a quick overview, we propose to see a simple use case with a Phone number, This phone number must be sent to three methods in a strict order, Check, Transform, Format.

Let's assume we don't have access to iteration process. But we can sort in which orders our methods must be called for respect our process.

Register Callback

In first, we will create our callbacks process.

require_once dirname(dirname(__DIR__)) . '/vendor/autoload.php';

// First method used to check if phone number is correct.
$check = function($phone) {
    if (1 !== preg_match('/^\+?[0-9]+$/', $phone)) {
        throw new \Exception('Phone number not conform.');

    return $phone;

// Second method used to convert number into object.
$transform = function($phone) {
    return (object)[
        'prefix'  => '+33',
        'country' => 'France',
        'number'  => $phone,

// Third method used to display formatted number.
$format = function(\StdClass $phone) {
    return $phone->prefix
        . ' '
        . wordwrap($phone->number, 3, ' ', true)

Create and fill Heap

Creation of our Heap with minimum priority Ascending ( lower called first ).

$heap = new \Hoa\Heap\Min();

// Insert the callback method with the priority argument used for order Heap.
$heap->insert($transform, 20);
$heap->insert($check, 10);
$heap->insert($format, 30);

// Show the number of item in Heap.

 * Will output:
 *     int(3)

Iteration Heap

Then we can iterate on our Heap with assurance of correct call order. Spread your number into closure and have process mutation expected.

// Phone number as expected by first callback.
$number = '123001234';

foreach ($heap as $closure) {
    try {
        // Mutation of number by closure, execute in the priority order expected.
        $number = $closure($number);
    } catch (\Exception $e) {

// Finally, we can display our formatted number.

 * Will output:
 *     string(15) "+33 123 001 234"

An error or a suggestion about the documentation? Contributions are welcome!