一个数组变换问题

做开发的时候遇到一个问题,现在记录一下.顺便说一句,PHP内置的函数能实现的,一定要用内置函数实现,看来还是对php.net了解不够啊~ 需要将如下数组

array(4) {
  ["id"]=>  array(2) {
    [0]=>    string(1) "1"
    [1]=>    string(1) "2"
  }
  ["name"]=>  array(2) {
    [0]=>    string(7) "这是1"
    [1]=>    string(7) "这是2"
  }
  ["spec"]=>  array(2) {
    [0]=>    string(1) "x"
    [1]=>    string(1) "y"
  }
  ["quan"]=>  array(2) {
    [0]=>    string(2) "22"
    [1]=>    string(2) "23"
  }
}

转换成:

array(2) {
  [0]=>
  array(4) {
    [id]=>    string(1) "1"
    [name]=>    string(7) "这是1"
    [spec]=>    string(1) "x"
    [quan]=>    string(2) "22"
  }
  [1]=>
  array(4) {
    [id]=>    string(1) "2"    
    [name]=>    string(7) "这是2"
    [spec]=>    string(1) "y"
    [quan]=>    string(2) "23"
  }
}

这种格式.其实这个非常简单就可以实现:

function user_array_flip($arr){
    $data = array();
    foreach($arr as $k => $v){
        foreach($v as $id => $val){
            $data[$id][$k] = $val;
        }
   }
    return $data;
}
var_dump(user_array_flip($array));

简单的循环就可以搞定,这里主要是想提一下一种更简便的方式:

$arr = 数组;
$new_arr = call_user_func_array('array_map',array_merge(array(null),$arr));

就可以搞定啦,如果需要保留下标

array_walk($new_arr,'change_keys',array_keys($arr));
function change_keys(&$v,$vk,$keys) {
    $v = array_combine($keys,$v);
}