我想只交换多维数组矩阵的主对角线元素,如下面的
交换之前
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];
}
?>
答案 0 :(得分:1)
听起来你有点失落。这不是太难,我建议你把它分成更小的问题,这可能会让你更容易处理。
首先根据矩阵大小创建一个获取对角线阵列的函数
建议
您有一个由{2}数组nxn
表示的a[i][j]
矩阵,然后是(伪代码):
while i < n do:
diagonal << a[i][j]
i,j+=1
然后,为对角线创建一个交换函数,PHP中的reverse_array
函数可能有所帮助。
最后,当进行反向对角线计算时,您可以打印旧数组并将其对角线换成新数组。
有更短的方法和更有效的方法,但在我看来,你应该如何做到这一点,所以下次你遇到这种问题时你会知道这个问题。
答案 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>";
}
}
}
?>