我有一个数组
$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;
}
}
有没有简单的功能可以在一行中完成?
谢谢
答案 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_map
或array_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