Gnu*_*fo1 9 php arrays multidimensional-array
通常我会问如何变成这样的东西:
1 2 3
4 5 6
7 8 9
10 11 12
Run Code Online (Sandbox Code Playgroud)
进入:
1 4 7 10
2 5 8 11
3 6 9 12
Run Code Online (Sandbox Code Playgroud)
但实际上我想把它变成这个:
1 5 9
2 6 10
3 7 11
4 8 12
Run Code Online (Sandbox Code Playgroud)
换句话说,我想翻转行和列,但保持新数组的"宽度"和"高度"相同.我已经坚持了一个多小时.
这是我用来做普通"翻转"的功能(第一个例子):
function flip($arr)
{
$out = array();
foreach ($arr as $key => $subarr)
{
foreach ($subarr as $subkey => $subvalue)
{
$out[$subkey][$key] = $subvalue;
}
}
return $out;
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*iot 10
只需按正确顺序走数组即可.假设您有相对较小的阵列,最简单的解决方案就是在该步行期间创建一个全新的阵列.
解决方案将采用以下形式:
$rows = count($arr);
$cols = count($arr[0]); // assumes non empty matrix
$ridx = 0;
$cidx = 0;
$out = array();
foreach($arr as $rowidx => $row){
foreach($row as $colidx => $val){
$out[$ridx][$cidx] = $val;
$ridx++;
if($ridx >= $rows){
$cidx++;
$ridx = 0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
function flip_row_col_array($array) {
$out = array();
foreach ($array as $rowkey => $row) {
foreach($row as $colkey => $col){
$out[$colkey][$rowkey]=$col;
}
}
return $out;
}
Run Code Online (Sandbox Code Playgroud)