重新排列多维数组

时间:2012-03-08 05:14:57

标签: php multidimensional-array

我有一个以下格式的数组:

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
        )
)

有没有简短的方法来解决这个问题?

2 个答案:

答案 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值作为回调。

然后第二个调用就是在这里改变键所需的键,用一个关联的数组替换索引数组。