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.180 tracks/php/exercises/transpose/example.php
trackler-2.2.1.179 tracks/php/exercises/transpose/example.php
trackler-2.2.1.178 tracks/php/exercises/transpose/example.php
trackler-2.2.1.177 tracks/php/exercises/transpose/example.php
trackler-2.2.1.176 tracks/php/exercises/transpose/example.php
trackler-2.2.1.175 tracks/php/exercises/transpose/example.php
trackler-2.2.1.174 tracks/php/exercises/transpose/example.php
trackler-2.2.1.173 tracks/php/exercises/transpose/example.php
trackler-2.2.1.172 tracks/php/exercises/transpose/example.php
trackler-2.2.1.171 tracks/php/exercises/transpose/example.php
trackler-2.2.1.170 tracks/php/exercises/transpose/example.php
trackler-2.2.1.169 tracks/php/exercises/transpose/example.php
trackler-2.2.1.167 tracks/php/exercises/transpose/example.php
trackler-2.2.1.166 tracks/php/exercises/transpose/example.php
trackler-2.2.1.165 tracks/php/exercises/transpose/example.php
trackler-2.2.1.164 tracks/php/exercises/transpose/example.php
trackler-2.2.1.163 tracks/php/exercises/transpose/example.php
trackler-2.2.1.162 tracks/php/exercises/transpose/example.php
trackler-2.2.1.161 tracks/php/exercises/transpose/example.php
trackler-2.2.1.160 tracks/php/exercises/transpose/example.php