【问题标题】:How to change rows with columns in matrix with same width?如何更改具有相同宽度的矩阵中的列的行?
【发布时间】:2023-03-19 14:37:01
【问题描述】:

我的矩阵中的值是

1 2 3

4 5 6

7 8 9

10 11 12

13 14 15

我想将第二列作为从第 2 列开始的行作为(矩阵的宽度和长度相同)

这样

2 5 8

11 14 1

4 7 10

13 3 6

9 12 15

我使用那个函数,我知道它返回相同的矩阵,没有任何变化

function change($matrix){
$new_matrix =array();
foreach ($matrix as $row => $values) {
foreach ($values as $columns=>$value) {
    $new_matrix[$row][$columns] = $value;
}   
}
return $new_matrix;
}

我可以使用该功能,但结构非常糟糕

function change1($matrix)
{
$list= array(
        array($matrix[0][1],$matrix[1][1],$matrix[2][1]),
        array($matrix[3][1],$matrix[4][1],$matrix[0][0]),
        array($matrix[1][0],$matrix[2][0],$matrix[3][0] ),
        array($matrix[4][0],$matrix[0][2],$matrix[1][2] ),
        array($matrix[2][2],$matrix[3][2],$matrix[4][2] ),
);
return $list;

}

【问题讨论】:

  • 所以你从第二列开始,然后移动到第一列并以第三列结束......为什么? :-?

标签: php arrays matrix multidimensional-array


【解决方案1】:

如果您有PHP 5.5+,可以简单地使用array_column()。然后合并线性数组中的所有列。示例:

$arr1 = array_column($arr, 1);
$arr2 = array_column($arr, 0);
$result = array_merge($arr1, $arr2);
$arr1 = array_column($arr, 2);
$result = array_chunk(array_merge($result, $arr1), 3);
foreach($result as $val){
    foreach($val as $v){
        echo $v . ' ';
    }
    echo '<br />';
}

【讨论】:

    【解决方案2】:
    $data = array(
        array(1, 2, 3),
        array(4, 5, 6),
        array(7, 8, 9),
        array(10, 11, 12),
        array(13, 14, 15),
    );
    
    array_unshift($data, null);
    $newData = call_user_func_array('array_map', $data);
    $newData = array_chunk(
        array_merge_recursive($newData[1], $newData[0], $newData[2]),
        3
    );
    var_dump($newData);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 2015-08-12
      • 1970-01-01
      • 2020-06-04
      相关资源
      最近更新 更多