Транспонирование двумерного массива по диагонали PHP

Есть двумерный массив

$arr1 = [11,12,13,14,15];
$arr2 = [21,22,23,24,25];
$arr3 = [31,32,33,34,35];
$arr4 = [41,42,43,44,45];
$matrix = [$arr1, $arr2, $arr3, $arr4];

Нужно его отзеркалить по основной диагонали.

Чтобы получилось Ну то есть должно получится

$arr1 = [11,15,14,13,12];
$arr2 = [21,22,25,24,23];
$arr3 = [31,32,33,35,34];
$arr4 = [41,42,43,44,45];

Написал вот такую прогу, не работает. В чем проблема?

<?php

$arr1 = [11,12,13,14,15];
$arr2 = [21,22,23,24,25];
$arr3 = [31,32,33,34,35];
$arr4 = [41,42,43,44,45];
$arr5 = [51,52,53,54,55];
$matrix = [$arr1, $arr2, $arr3, $arr4, $arr5];


for ($i=0; $i<count($matrix);$i++)
    {
        for ($j=0; $j<count($matrix); $j++)
            {
                if ($j>$i)
                {
                  for ($j=count($matrix[$i])-1; $j>=0; $j--)
                    {
                        $reverse[$i][]=$matrix[$i][$j];
                    } 
                }
                else 
                {
                  $reverse[$i][]=$matrix[$i][$j];
                }
            }
    }

for ($k=0;$k<count($reverse);$k++)
    {
        for ($l=0;$l<count($reverse[$k]);$l++)
        {
            echo $reverse[$k][$l];
            echo ' ';
        }
        echo '<br>';
    }

Ответы (2 шт):

Автор решения: Alpha

Если я правильно понял вопрос то это поможет:

$arr1 = [11,12,13,14,15];
$arr2 = [21,22,23,24,25];
$arr3 = [31,32,33,34,35];
$arr4 = [41,42,43,44,45];
$arr5 = [51,52,53,54,55];
$matrix = [$arr1, $arr2, $arr3, $arr4, $arr5];

$reversedArray = array_map(function($innerArray){
    return array_reverse($innerArray);
},array_reverse($matrix));

Для вывода:

foreach($reversedArray as $innerArray){
    foreach($innerArray as $item){
        echo $item . ' ';
    }
    echo PHP_EOL;
}

Ну и сам результат:

55 54 53 52 51 
45 44 43 42 41 
35 34 33 32 31 
25 24 23 22 21 
15 14 13 12 11 
→ Ссылка
Автор решения: девочка с глазами ребёнка

Если учитывать, что матрица квадратная, то можно рассмотреть следующее:

Имеем матрицу:

$matrix = [
    [11, 12, 13, 14, 15], 
    [21, 22, 23, 24, 25], 
    [31, 32, 33, 34, 35], 
    [41, 42, 43, 44, 45], 
    [51, 52, 53, 54, 55]
];

Поскольку мы повторяем всю матрицу, происходит отображение, но когда поиск идет ниже диагонали, отражение идет обратно в их первоначальные позиции. Внутренняя петля должна начинаться на $i+1, и это будет держать нас выше диагонали.

for ($i = 0; $i < count($matrix); $i++) {
    for ($j = $i + 1; $j < count($matrix); $j++) {
        $temp = $matrix[$i][$j];
        $matrix[$i][$j] = $matrix[$j][$i];
        $matrix[$j][$i] = $temp;
    }
}

В результате:

11 21 31 41 51 
12 22 32 42 52 
13 23 33 43 53 
14 24 34 44 54 
15 25 35 45 55 

https://3v4l.org/qGp6P

→ Ссылка