如何转换输入数组
$input['id'] = [1,2,3,4];
$input['name'] = ['a' , 'b' , 'c'];
$input['alias'] = ['i' , 'ii' , 'iii' , 'iv' , 'v'];
$input['object'] = [$object1 , $object2];
输出数组
$output[] = ['id'=>1 , 'name'=>'a' , 'alias'=>'i' , 'object'=>$object1];
$output[] = ['id'=>2 , 'name'=>'b' , 'alias'=>'ii' , 'object'=>$object2];
$output[] = ['id'=>3 , 'name'=>'c' , 'alias'=>'iii' , 'object'=>NULL];
$output[] = ['id'=>4 , 'name'=>'' , 'alias'=>'iv' , 'object'=>NULL];
$output[] = ['id'=>0 , 'name'=>'' , 'alias'=>'v' , 'object'=>NULL];
错过的号码 = 0
丢失的字符串 = ''
错过的对象=空
作为第一个答案,我会执行以下操作:
$output = array_map(null, $input['id'], $input['name'], $input['alias'], $input['object']);
这将从您的数组创建一个数组。
此解决方案的对应部分是,如果未设置值,它总是返回
null
。
更多信息:http://php.net/manual/en/function.array-map.php#example-5583
编辑 2017 年 5 月 3 日 如果您需要将键添加到输出(id、名称、别名、对象),您可以对堆栈中的每个项目应用一个函数来添加它们。 以下是一个可能的解决方案:
array_walk($output, function(&$item, $key) {
$item = array_combine(['id','name','alias', 'object'], array_values($item));
});
使用
array_map()
转置数据将无需手动计算所需的迭代次数。要在丢失时整理首选默认值,请在每次迭代返回新关联行之前使用空合并赋值运算符。
代码:(演示)
var_export(
array_map(
function(?int $id, ?string $name, ?string $alias, ?object $object) {
$id ??= 0;
$name ??= '';
$alias ??= '';
return get_defined_vars();
},
$input['id'],
$input['name'],
$input['alias'],
$input['object']
)
);
输出:
array (
0 =>
array (
'id' => 1,
'name' => 'a',
'alias' => 'i',
'object' =>
(object) array(
'foo' => 1,
),
),
1 =>
array (
'id' => 2,
'name' => 'b',
'alias' => 'ii',
'object' =>
(object) array(
'bar' => 2,
),
),
2 =>
array (
'id' => 3,
'name' => 'c',
'alias' => 'iii',
'object' => NULL,
),
3 =>
array (
'id' => 4,
'name' => '',
'alias' => 'iv',
'object' => NULL,
),
4 =>
array (
'id' => 0,
'name' => '',
'alias' => 'v',
'object' => NULL,
),
)