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.78 tracks/php/exercises/transpose/example.php
trackler-2.2.1.77 tracks/php/exercises/transpose/example.php
trackler-2.2.1.76 tracks/php/exercises/transpose/example.php
trackler-2.2.1.75 tracks/php/exercises/transpose/example.php
trackler-2.2.1.74 tracks/php/exercises/transpose/example.php
trackler-2.2.1.73 tracks/php/exercises/transpose/example.php
trackler-2.2.1.72 tracks/php/exercises/transpose/example.php
trackler-2.2.1.71 tracks/php/exercises/transpose/example.php
trackler-2.2.1.70 tracks/php/exercises/transpose/example.php
trackler-2.2.1.69 tracks/php/exercises/transpose/example.php
trackler-2.2.1.68 tracks/php/exercises/transpose/example.php
trackler-2.2.1.67 tracks/php/exercises/transpose/example.php
trackler-2.2.1.66 tracks/php/exercises/transpose/example.php
trackler-2.2.1.65 tracks/php/exercises/transpose/example.php
trackler-2.2.1.64 tracks/php/exercises/transpose/example.php
trackler-2.2.1.63 tracks/php/exercises/transpose/example.php
trackler-2.2.1.62 tracks/php/exercises/transpose/example.php
trackler-2.2.1.61 tracks/php/exercises/transpose/example.php
trackler-2.2.1.60 tracks/php/exercises/transpose/example.php
trackler-2.2.1.59 tracks/php/exercises/transpose/example.php