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.159 tracks/php/exercises/transpose/example.php
trackler-2.2.1.158 tracks/php/exercises/transpose/example.php
trackler-2.2.1.157 tracks/php/exercises/transpose/example.php
trackler-2.2.1.156 tracks/php/exercises/transpose/example.php
trackler-2.2.1.155 tracks/php/exercises/transpose/example.php
trackler-2.2.1.154 tracks/php/exercises/transpose/example.php
trackler-2.2.1.153 tracks/php/exercises/transpose/example.php
trackler-2.2.1.152 tracks/php/exercises/transpose/example.php
trackler-2.2.1.151 tracks/php/exercises/transpose/example.php
trackler-2.2.1.150 tracks/php/exercises/transpose/example.php
trackler-2.2.1.149 tracks/php/exercises/transpose/example.php
trackler-2.2.1.148 tracks/php/exercises/transpose/example.php
trackler-2.2.1.147 tracks/php/exercises/transpose/example.php
trackler-2.2.1.146 tracks/php/exercises/transpose/example.php
trackler-2.2.1.145 tracks/php/exercises/transpose/example.php
trackler-2.2.1.144 tracks/php/exercises/transpose/example.php
trackler-2.2.1.143 tracks/php/exercises/transpose/example.php
trackler-2.2.1.142 tracks/php/exercises/transpose/example.php
trackler-2.2.1.141 tracks/php/exercises/transpose/example.php
trackler-2.2.1.140 tracks/php/exercises/transpose/example.php