Sha256: a2d68436e6ae9d1bd8201b37d614d15faed746180823d043260287a905754b7c

Contents?: true

Size: 1.24 KB

Versions: 131

Compression:

Stored size: 1.24 KB

Contents

<?php
/**
 * Transpose multi line text into Rows become columns and columns become rows.
 * Eg: http://en.wikipedia.org/wiki/Transpose
 *
 * @param String $text - Multi-line input
 *
 * @return string
 */
function transpose($text)
{
    $findMaxLength = function ($lines) {
        return array_reduce($lines, function ($max, $line) {
            return max($max, strlen($line));
        }, 0);
    };

    $pad = function ($lines, $length) {
        return array_map(function ($line) use ($length) {
            return str_pad($line, $length, ' ', STR_PAD_RIGHT);
        }, $lines);
    };

    if ($text === ['']) {
        return $text;
    }

    $maxLength = $findMaxLength($text);

    $lines = $pad($text, $maxLength);

    $result = [];

    foreach ($lines as $lineNumber => $line) {
        $characters = str_split($line);
        foreach ($characters as $index => $character) {
            if (isset($result[$index])) {
                $result[$index] .= $character;
            } else {
                $result[$index] = $character;
            }
        }
    }

    $trimLastLine = function ($lines) {
        $lastLine = array_pop($lines);
        array_push($lines, rtrim($lastLine));
        return $lines;
    };

    return $trimLastLine($result);
}

Version data entries

131 entries across 131 versions & 1 rubygems

Version Path
trackler-2.2.1.98 tracks/php/exercises/transpose/example.php
trackler-2.2.1.97 tracks/php/exercises/transpose/example.php
trackler-2.2.1.96 tracks/php/exercises/transpose/example.php
trackler-2.2.1.95 tracks/php/exercises/transpose/example.php
trackler-2.2.1.94 tracks/php/exercises/transpose/example.php
trackler-2.2.1.93 tracks/php/exercises/transpose/example.php
trackler-2.2.1.92 tracks/php/exercises/transpose/example.php
trackler-2.2.1.91 tracks/php/exercises/transpose/example.php
trackler-2.2.1.90 tracks/php/exercises/transpose/example.php
trackler-2.2.1.89 tracks/php/exercises/transpose/example.php
trackler-2.2.1.88 tracks/php/exercises/transpose/example.php
trackler-2.2.1.87 tracks/php/exercises/transpose/example.php
trackler-2.2.1.86 tracks/php/exercises/transpose/example.php
trackler-2.2.1.85 tracks/php/exercises/transpose/example.php
trackler-2.2.1.84 tracks/php/exercises/transpose/example.php
trackler-2.2.1.83 tracks/php/exercises/transpose/example.php
trackler-2.2.1.82 tracks/php/exercises/transpose/example.php
trackler-2.2.1.81 tracks/php/exercises/transpose/example.php
trackler-2.2.1.80 tracks/php/exercises/transpose/example.php
trackler-2.2.1.79 tracks/php/exercises/transpose/example.php