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.119 tracks/php/exercises/transpose/example.php
trackler-2.2.1.118 tracks/php/exercises/transpose/example.php
trackler-2.2.1.117 tracks/php/exercises/transpose/example.php
trackler-2.2.1.116 tracks/php/exercises/transpose/example.php
trackler-2.2.1.115 tracks/php/exercises/transpose/example.php
trackler-2.2.1.114 tracks/php/exercises/transpose/example.php
trackler-2.2.1.113 tracks/php/exercises/transpose/example.php
trackler-2.2.1.111 tracks/php/exercises/transpose/example.php
trackler-2.2.1.110 tracks/php/exercises/transpose/example.php
trackler-2.2.1.109 tracks/php/exercises/transpose/example.php
trackler-2.2.1.108 tracks/php/exercises/transpose/example.php
trackler-2.2.1.107 tracks/php/exercises/transpose/example.php
trackler-2.2.1.106 tracks/php/exercises/transpose/example.php
trackler-2.2.1.105 tracks/php/exercises/transpose/example.php
trackler-2.2.1.104 tracks/php/exercises/transpose/example.php
trackler-2.2.1.103 tracks/php/exercises/transpose/example.php
trackler-2.2.1.102 tracks/php/exercises/transpose/example.php
trackler-2.2.1.101 tracks/php/exercises/transpose/example.php
trackler-2.2.1.100 tracks/php/exercises/transpose/example.php
trackler-2.2.1.99 tracks/php/exercises/transpose/example.php