使用PHP交换二维数组键顺序

时间:2018-09-12 18:45:59

标签: php arrays

我有一个数组

$array[a][1]=value11
$array[a][2]=value12
$array[a][3]=value13
$array[b][2]=value22
$array[c][3]=value33

我需要将其更改为

$array[1][a]=value11
$array[2][a]=value12
$array[3][a]=value13
$array[2][b]=value22
$array[3][c]=value33

我可以使用foreach做到

foreach($array as $k1=>$array2)
{
   foreach($array2 as $k2=>$value)
   {
     $new_array[$k2][$k1]=$value;
   }
}

有没有简单的功能可以在一行中完成?

谢谢

1 个答案:

答案 0 :(得分:0)

PHP没有本机的简单函数就可以在一行中实现这种目的,但是如果您想使用一行函数,则可以将代码包装在一个函数中并在每次需要时简单地调用它:< / p>

function swapKeys($array){
    if(!is_array($array)) return false;
    foreach($array as $k1=>$array2)
    {   
        if(!is_array($array2)) return false;
        foreach($array2 as $k2=>$value)
        {
            $new_array[$k2][$k1]=$value;
        }
    }
    return $new_array;
}

但是,如果您不想使用foreach循环,则还有array_maparray_walk的替代方法,它们使用了许多本机PHP数组函数,例如{{1} },array_keys以及闭包和范围变量继承的概念。因此,您的一行代码可能类似于:

array_combine

!($new=[])?array_map(function($val,$key)use(&$new){$new+=array_combine(array_keys($val),array_map(function($value)use($key){ return [$key=>$value];},$val));},$array,array_keys($array)):[];

给出数组:

!($new=[])?array_walk($array, function($item,$key) use (&$new){ $new+=array_combine(array_keys($item),array_map(function($val) use($key){return [$key=>$val];},$item));}):[];

$array['a'][1]='value11'; $array['a'][2]='value12'; $array['a'][3]='value13'; $array['b'][4]='value14'; $array['c'][5]='value15'; 将在两种情况下输出:

var_dump($new)

您可以在线查看工作代码https://3v4l.org/K4VRu