我有一个以下格式的数组:
Array (
[0] => Array
(
[0] => a
[1] => b
[2] => c
)
[1] => Array
(
[0] => d
[1] => e
[2] => f
)
[2] => Array
(
[0] => 0
[1] => 0
[2] => 0
)
[3] => Array
(
[0] => 100
[1] => 200
[2] => 300
)
)
第一个数组(外部)中的索引,即0表示名称,1表示类型,2表示错误,3表示大小。
我必须按以下格式重新排列此数组:
Array
(
[0] => Array
(
[name] => a
[type] => d
[error] => 0
[size] => 100
)
[1] => Array
(
[name] => b
[type] => e
[error] => 0
[size] => 200
)
[2] => Array
(
[name] => c
[type] => f
[error] => 0
[size] => 300
)
)
有没有简短的方法来解决这个问题?
答案 0 :(得分:4)
你可以用一个好的老式循环来做到这一点:
function extract_values($array) {
$i = 0;
$len = count($array[0]);
$result = array();
while($i++ < $len) {
$result[] = array(
'name' => array[0],
'type' => array[1],
'error' => array[2],
'size' => array[3]
);
}
return $result;
}
假设您在上面描述的数组存储在名为$my_array
的变量中,您可以使用以下内容对其进行转换:
$my_array = extract_values($my_array);
答案 1 :(得分:3)
您可以使用array_map
执行此操作:
// $array is your array $new_array = array_map(null, $array[0], $array[1], $array[2], $array[3]); // Then, change keys $new_array = array_map(function($v) { return array( 'name' => $v[0], 'type' => $v[1], 'error' => $v[2], 'size' => $v[3] ); }, $new_array);
虽然简单的循环可能会更快。
编辑:解释
首次调用array_map
,如上所述here重新组织数组并更改密钥:
Input: array('foo1', 'bar1'), array('foo2', 'bar2') Output: array('foo1', 'foo2'), array('bar1', 'bar2')
请注意null
值作为回调。
然后第二个调用就是在这里改变键所需的键,用一个关联的数组替换索引数组。