for ($i = 0; $i < sizeof($elements); $i++) {
        $temp_elements[$elements[$i]]++;
    }
    // After above loop, $temp_elements[$i] now contains number of elements
    // equal to $i. For example :
    //                 index: 0  1  2  3  4  5
    // $elements =      array(1, 1, 0, 0, 3, 1), after the loop :
    //
    //                 index: 0  1  2  3
    // $temp_elements = array(2, 3, 0, 1)
    for ($i = 1; $i <= $k; $i++) {
        $temp_elements[$i] += $temp_elements[$i - 1];
    }
    // After above loop, $temp_elements[$i] now contains number of elements
    // less than or equal to $i. For example:
    //                 index: 0  1  2  3
    // $temp_elements = array(2, 3, 0, 1), after the loop :
    //                 index: 0  1  2  3
    // $temp_elements = array(2, 5, 5, 6)
    for ($i = sizeof($elements) - 1; $i >= 0; $i--) {
        $sorted_elements[$temp_elements[$elements[$i]] - 1] = $elements[$i];
        $temp_elements[$elements[$i]]--;
    }
    $elements = $sorted_elements;
}
// Example usage:
$a = array(3, 5, 9, 8, 5, 7, 2, 1, 13, 2, 2, 4, 3, 1, 6);
var_dump($a);
counting_sort($a, 13);
// Sort the elements, k = 13
var_dump($a);
 public function testArrayWithRepeatedElements()
 {
     $original = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
     $copy = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
     $this->assertEquals(counting_sort($original), $copy);
 }