Голову сломал, помогите с транформацией массива

zxc

Новичок
Голову сломал, помогите с транформацией массива

Есть массив

PHP:
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [1] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )

    [2] => Array
        (
            [0] => 7
            [1] => 8
            [2] => 9
        )

)
Необходимо привести его к виду

PHP:
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 5
            [2] => 9
        )

    [1] => Array
        (
            [0] => 2
            [1] => 6
            [2] => 7
        )

    [2] => Array
        (
            [0] => 3
            [1] => 4
            [2] => 8
        )

)

Вожусь с этим пол дня, хоть убейте не получается создать в голове алгоритм.
Подскажите как реализовать?
 

zxc

Новичок
PHP:
[0][0] => 1 => [0][0]
[0][1] => 2 
[0][2] => 3 


[1][0] => 4 
[1][1] => 5 => [0][1]
[1][2] => 6

[2][0] => 7 
[2][1] => 8 
[2][2] => 9 => [0][2]
и т.д.
тоесть сдвиг на 3 элемента
 

Necromant

Новичок
PHP:
$arr=[];
$ret=[];
for ($i=0;$i<3;$i++) {
   for ($j=0;$j<3;$j++)  {
   	    if ($j+$i>2) {
   			$k = abs(3-($j+$i));   			
   		} else {
   			$k = $j+$i;   			
   		}
        $ret[$j][$k] = $arr[$k][$i];
   }
}
где-то так

1,5,9 диагональ
+1 = 5,7,3
+2 = 9,2,4
 

Profic

just Profic (PHP5 BetaTeam)
E:\>type test.php
PHP:
<?php
$arr = array(
        array(1, 2, 3),
        array(4, 5, 6),
        array(7, 8, 9),
);

$size1 = count($arr);
$size2 = count($arr, true) - $size1;

$new = array();
$idx = 0;
for ($i = 0; $i < $size2; ++$i) {
        $new[$idx / $size1][$idx % $size1] = $arr[$i / $size1][$i % $size1];
        if ($i % $size1 == 2) {
                $idx += 1;
        } else {
                $idx += 3;
        }
        if ($idx >= $size2) {
                $idx %= $size1;
        }
}

print_r($arr);
print_r($new);
?>
E:\>php test.php
PHP:
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
        )

    [1] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )

    [2] => Array
        (
            [0] => 7
            [1] => 8
            [2] => 9
        )

)
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 5
            [2] => 9
        )

    [1] => Array
        (
            [0] => 2
            [1] => 6
            [2] => 7
        )

    [2] => Array
        (
            [0] => 3
            [1] => 4
            [2] => 8
        )

)
E:\>
 

itprog

Cruftsman
Или так(имхо более правильный вариант):
PHP:
<?
$arr = array(
        array(1, 2, 3),
        array(4, 5, 6),
        array(7, 8, 9),
); 
$new = array();
$count = $key = 0; 

foreach($arr as $arr_arr) {
  $key2 = 0;
  for($idx=0;$idx<count($arr);$idx++,$key2++) { 
   $new[$key][$key2] = $arr[$idx][$count];
   $count = ($count >= count($arr_arr)-1)?0:$count+1;
  } 
  $key++;
  $count++;
} 
?>
результат:
PHP:
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 5
            [2] => 9
        )

    [1] => Array
        (
            [0] => 2
            [1] => 6
            [2] => 7
        )

    [2] => Array
        (
            [0] => 3
            [1] => 4
            [2] => 8
        )

)
 
Сверху