Поправьте мой foreach плыз

151
02 июня 2019, 19:10

Дано: два массива. В первом 8 букв, во втором 8 цифр.

Задача: Вывести первые 4 буквы, затем вывести первые 4 цифры, затем вывести последние 4 буквы и в конце вывести последние 4 цифры.

Условие: Нельзя использовать никакие циклы, кроме foreach. Изменять массивы нельзя.

Т.е. на выходе должно быть: a b c d 1 2 3 4 e f g h 5 6 7 8

Я сделал так:

<?php
$letters = ['a','b','c','d','e','f','g','h'];
$numbers = ['1','2','3','4','5','6','7','8'];
$outside = 0;
$inside = 0;
foreach($letters as $letter)
{
    if($outside < 4)
    {
        echo "$letter\n";
    }
    if($outside == 4)
    {
        foreach($numbers as $number)
        {
            if($inside < 4)
            {
                echo "$number\n";
            }
            $inside++;
        }
        $inside = 0;
    }
    if($outside > 3)
    {
        echo "$letter\n";
    }
    if($outside == 7)
    {
        foreach($numbers as $number)
        {
            if($inside > 3)
            {
                echo "$number\n";
            }
        $inside++;
        }
    }
    $outside++;
}

Но мне кажется, что этот код выглядит как гумно и можно изящней. Подскажите нормальное решение пожалуйста, сделайте код-ревью мне.

Answer 1
<?php
$letters = ['a','b','c','d','e','f','g','h'];
$numbers = ['1','2','3','4','5','6','7','8'];
echo implode ('', [
    implode ('', array_slice ($letters, 0, 4)),
    implode ('', array_slice ($numbers, 0, 4)),
    implode ('', array_slice ($letters, 4)),
    implode ('', array_slice ($numbers, 4))
]);
Answer 2
$letters = ['a','b','c','d','e','f','g','h'];
$numbers = ['1','2','3','4','5','6','7','8'];
$x=array_chunk(array_merge($letters,$numbers),4);
echo implode('',array_merge($x[0],$x[2],$x[1],$x[3]));

и слегка модифицированный вариант @leninel

$x=array_merge(array_splice($letters,0,4),array_splice($numbers,0,4),$letters,$numbers);
echo implode ('', $x);
READ ALSO
Указатель на метод класса и скобки

Указатель на метод класса и скобки

Чем обусловлена невозможность писать указатель на метод в скобках? Почему запись указателя на метод должна быть именно

151
Как заменить символы только в первой половине строки?

Как заменить символы только в первой половине строки?

Решаю задачку, не понимаю как сделать замену только в первой половине строки

168