为了账号安全,请及时绑定邮箱和手机立即绑定

在PHP中转换多维数组

在PHP中转换多维数组

PHP
交互式爱情 2019-06-13 14:44:58
在PHP中转换多维数组如何在PHP中翻转90度(转置)多维数组?例如:// Start with this array $foo = array(     'a' => array(        1 => 'a1',        2 => 'a2',        3 => 'a3'      ),     'b' => array(        1 => 'b1',        2 => 'b2',        3 => 'b3'      ),     'c' => array(        1 => 'c1',        2 => 'c2',        3 => 'c3'      ) ); $bar = flipDiagonally($foo); // Mystery function var_dump($bar[2]); // Desired output: array(3) {   ["a"]=>   string(2) "a2"   ["b"]=>   string(2) "b2"   ["c"]=>   string(2) "c2" }你会如何实现flipDiagonally()?编辑:这不是作业。我只想看看是否有任何SOER有一个比最明显的路线更有创意的解决方案。但是,由于有少数人抱怨这个问题太容易,那么更通用的解决方案又如何呢?TH维数组?也就是说,您将如何编写一个函数,以便:$foo[j][k][...][x][y][z] = $bar[z][k][...][x][y][j]?(PS.)我不认为12个嵌套for loops是这种情况下的最佳解决方案。)
查看完整描述

3 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

function transpose($array) {
    array_unshift($array, null);
    return call_user_func_array('array_map', $array);
}

或者如果您使用的是PHP5.6或更高版本:

function transpose($array) {
    return array_map(null, ...$array);
}


查看完整回答
反对 回复 2019-06-13
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

有两个循环。

function flipDiagonally($arr) {
    $out = array();
    foreach ($arr as $key => $subarr) {
        foreach ($subarr as $subkey => $subvalue) {
            $out[$subkey][$key] = $subvalue;
        }
    }
    return $out;
}


查看完整回答
反对 回复 2019-06-13
?
当年话下

TA贡献1890条经验 获得超9个赞

我想你指的是数组转座子(列变成行,行变成列)。

这是一个为你做这件事的函数(来源):

function array_transpose($array, $selectKey = false) {
    if (!is_array($array)) return false;
    $return = array();
    foreach($array as $key => $value) {
        if (!is_array($value)) return $array;
        if ($selectKey) {
            if (isset($value[$selectKey])) $return[] = $value[$selectKey];
        } else {
            foreach ($value as $key2 => $value2) {
                $return[$key2][$key] = $value2;
            }
        }
    }
    return $return;
}


查看完整回答
反对 回复 2019-06-13
  • 3 回答
  • 0 关注
  • 540 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信