如何在PHP中交换多维数组的矩阵主对角元素

时间:2014-02-05 05:37:06

标签: php

我想只交换多维数组矩阵的主对角线元素,如下面的

交换之前

 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

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

我所做的是 - 我能够获得如下对角线元素,它非常简单,但我无法继续进行

<?php

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

  foreach ( $array as $key => $val ) {

      print "<br>".$val[$key];

   }
?>  

3 个答案:

答案 0 :(得分:1)

听起来你有点失落。这不是太难,我建议你把它分成更小的问题,这可能会让你更容易处理。

  1. 首先根据矩阵大小创建一个获取对角线阵列的函数

    建议 您有一个由{2}数组nxn表示的a[i][j]矩阵,然后是(伪代码):

    while i < n do:
      diagonal << a[i][j] 
      i,j+=1
    
  2. 然后,为对角线创建一个交换函数,PHP中的reverse_array函数可能有所帮助。

  3. 最后,当进行反向对角线计算时,您可以打印旧数组并将其对角线换成新数组。

  4. 有更短的方法和更有效的方法,但在我看来,你应该如何做到这一点,所以下次你遇到这种问题时你会知道这个问题。

答案 1 :(得分:1)

我认为你缺少的是能够通过'x'和'y'坐标访问你的$数组:$ array [$ x] [$ y]。

<?php
  $array = array (
        array( '11','12','13','14','15'),
        array( '21','22','23','24','25'),
        array( '31','32','33','34','35'),
        array( '41','42','43','44','45'),
        array( '51','52','53','54','55')
    );
print_array($array);
echo "--------------\n";

//swap 
for( $i=0; $i<2; $i++ ){
  $temp= $array[$i][$i];
  $array[$i][$i]= $array[4-$i][4-$i];
  $array[4-$i][4-$i]=$temp;
}
print_array($array);

function print_array( $array )
{
  for($i=0;$i<5;$i++)
  {
    for($j=0;$j<5;$j++)
       echo $array[$i][$j]." ";
    echo "\n";
  }
}
?>

我会让你弄清楚为什么交换循环中有$i<2而打印循环有$i<5:)

此致,   TonyWilk

答案 2 :(得分:0)

这是工作示例;)

<?php

$array = array (
            array( '11','12','13','14','15','16'),
            array( '21','22','23','24','25','26'),
            array( '31','32','33','34','35','36'),
            array( '41','42','43','44','45','46'),
            array( '51','52','53','54','55','56'),
            array( '61','62','63','64','65','66')
        );

//print "<pre>";
//print_r($array); exit;

$cnt = count($array);

$i = 0; $j = count($array) - 1;

foreach ( $array as $key => $val ) {

    $newArr[$i][$j] = $val[$key];

    $j--; $i++;

}


$reversed = array_reverse($newArr);

$result = array_replace_recursive($array,$reversed);

matrix($array,$cnt);

print "=======================<br><br>";

matrix($result,$cnt);

function matrix( $result,$cnt )
{
    for($i=0;$i<$cnt;$i++)
    {
        for($k=0;$k<$cnt;$k++)
        {
            echo $result[$i][$k]." ";
            echo "<br>";
        }
    }
}

?>