php更改多维数组的排列/方向
是否有一个内置的PHP函数可以实现以下效果?我不知道如何描述这个问题,但我觉得我以前在某个地方见过一个解决方案: 如何更改此选项:php更改多维数组的排列/方向,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,是否有一个内置的PHP函数可以实现以下效果?我不知道如何描述这个问题,但我觉得我以前在某个地方见过一个解决方案: 如何更改此选项: array( ['name'] => array( [0] => 'Pat', [1] => 'Sam', [2] => 'Chris' ), ['score'] => array ( [0] => '100', [1] =&g
array(
['name'] => array(
[0] => 'Pat',
[1] => 'Sam',
[2] => 'Chris'
),
['score'] => array (
[0] => '100',
[1] => '95',
[2] => '109'
),
['color'] => array (
[0] => 'blue',
[1] => 'red',
[3] => 'green'
)
)
为此:
array(
[0] => array(
['name'] => 'Pat',
['score'] => '100',
['color'] => 'blue'
),
[1] => array(
['name'] => 'Sam',
['score'] => '95',
['color'] => 'red'
),
[2] => array(
['name'] => 'Chris',
['score'] => '109',
['color'] => 'green'
)
)
如果不是,递归函数是解决这个问题的正确方法吗?我不知道有任何内置函数,但一些循环应该可以做到这一点
$ar = array(
'name' => array(
0 => 'Pat',
1 => 'Sam',
2 => 'Chris'
),
'score' => array (
0 => '100',
1 => '95',
2 => '109'
),
'color' => array (
0 => 'blue',
1 => 'red',
3 => 'green'
),
);
$new_ar = array();
foreach($ar as $key => $val) {
foreach($val as $key2 => $val2) {
$new_ar[$key2][$key] = $val2;
}
}
print_r($new_ar);
试试这个,它会帮你的
Array
(
[0] => Array
(
[name] => Pat
[score] => 100
[color] => blue
)
[1] => Array
(
[name] => Sam
[score] => 95
[color] => red
)
[2] => Array
(
[name] => Chris
[score] => 109
[color] => green
)
)
您的第一个数组是一个二维数组,即一个矩阵,从数学角度来看,您想要的结果是转置矩阵,但保留了键,因此您可以在PHP中查找有关转置矩阵的一些答案。我还根据您的案例改编了上述问题的答案:
这被称为Sry-犯了一个小错误,现在已修复。
<?php
$old = array(
'name' => array('Pat', 'Sam','Chris'),
'score' => array('100', '95','109'),
'color' => array('blue', 'red','green'),
);
foreach($old as $key => $value){
$i = 0;
foreach($value as $sub_key => $sub_value){
$new[$i][$key] = $sub_value;
$i++;
}
}
print_r($new);
?>
Array
(
[0] => Array
(
[name] => Pat
[score] => 100
[color] => blue
)
[1] => Array
(
[name] => Sam
[score] => 95
[color] => red
)
[2] => Array
(
[name] => Chris
[score] => 109
[color] => green
)
)
$arr = array(
'name' => array('Pat', 'Sam', 'Chris'),
'score' => array ('100', '95', '109'),
'color' => array ('blue', 'red', 'green')
);
$arr_keys = array_keys($arr);
array_unshift($arr, function(){
return array_combine($GLOBALS['arr_keys'], func_get_args());
});
$result = call_user_func_array('array_map', $arr);
print_r($result);