我想以这种方式格式化动态表单数组。例如。我有:
[admins] => Array
(
[fName] => Array
(
[0] => adminName1
[1] => adminName2
)
[fType] => Array
(
[0] => adminType1
[1] => adminType2
)
[isNull] => Array
(
[0] => 0
[1] => 1
)
)
我想重新排列这个数组,以便所有与单个' admin'相关的信息结合起来。这样上面的数组就会转换为:
[admins] => Array
(
[0] => Array
(
[fName] => adminName1
[fType] => adminType1
[isNull] => 0
)
[1] => Array
(
[fName] => adminName2
[fType] => adminType2
[isNull] => 1
)
)
任何帮助,无论否定投票将不胜感激:)
答案 0 :(得分:1)
无论密钥名称是什么,这个都适用于所有数组。
它由2个foreach循环组成,它只循环number_of_elements * number_of_properties
次(在这种情况下:6次),这可能比调用array_map
或其他类似函数更好。
// Your array (here, I'm using your example data)
$yourArray = array(
'fName' => array('adminName1', 'adminName2'),
'fType' => array('adminType1', 'adminType2'),
'isNull' => array(0, 1)
);
$result = [];
foreach ($yourArray as $attribute => $values)
foreach ($values as $key => $value)
$result[$key][$attribute] = $value;
print_r($yourArray);
print_r($result);
答案 1 :(得分:0)
制作数组的副本,然后遍历索引,直到得到数组的最后一个索引:
$admins = $arr['admins'];
$arr['admins'] = array();
for ($i = 0; $i < count($admins['fName']); ++$i) {
$arr['admins'][] = array(
'fName' => $admins['fName'][$i],
'fType' => $admins['fType'][$i],
'isNull' => $admins['isNull'][$i]
);
}
请注意,您必须确保输入的所有子数组都与$arr['admins']['fName']
数组的长度相同。
答案 2 :(得分:0)
作为一个概念证明,我提出了这种效率低下的单线&#34; (如果你
不会计算args()
函数。
function args() {
return func_get_args();
}
$values = array_map(
'array_combine',
array_fill(
0,
count($a['admins'])-1,
array_keys($a['admins'])
),
call_user_func_array(
'array_map',
array_merge(array('args'),
array_values($a['admins']))
)
);