php数组的正确转换方式

The correct way to convert php array

我有这样的数据数组

    $data = [
    'name' => [
        (int) 0 => '095a108478345cac184f956b1e8dee91a5a89f87bbabd7b3fb4058f577adf.jpg',
        (int) 1 => '02059.jpg',
        (int) 2 => 'avatar.jpg'
    ],
    'type' => [
        (int) 0 => 'image/jpeg',
        (int) 1 => 'image/jpeg',
        (int) 2 => 'image/jpeg'
    ],
    'tmp_name' => [
        (int) 0 => 'C:\xampp\tmp\php17AA.tmp',
        (int) 1 => 'C:\xampp\tmp\php17BA.tmp',
        (int) 2 => 'C:\xampp\tmp\php17BB.tmp'
    ],
    'error' => [
        (int) 0 => (int) 0,
        (int) 1 => (int) 0,
        (int) 2 => (int) 0
    ],
    'size' => [
        (int) 0 => (int) 80542,
        (int) 1 => (int) 6532,
        (int) 2 => (int) 6879
    ]
  ]

我需要像这样转换成数组

    $data = [
    (int) 0 => [
        'name' => '095a108478345cac184f956b1e8dee91a5a89f87bbabd7b3fb4058f577adf.jpg',
        'type' => 'image/jpeg',
        'tmp_name' => 'C:\xampp\tmp\php17AA.tmp',
        'error' => (int) 0,
        'size' => (int) 80542
    ],
    (int) 1 => [
        'name' => '02059.jpg',
        'type' => 'image/jpeg',
        'tmp_name' => 'C:\xampp\tmp\php17BA.tmp',
        'error' => (int) 0,
        'size' => (int) 6532
    ],
    (int) 2 => [
        'name' => 'avatar.jpg',
        'type' => 'image/jpeg',
        'tmp_name' => 'C:\xampp\tmp\php17BB.tmp',
        'error' => (int) 0,
        'size' => (int) 6879
    ]
   ]

我正在寻找将第一个 php 数组转换为第二个数组的正确方法。是否为这些操作提供了任何 PHP 数组函数。 CakePHP 散列数组管理是否可行?

是的,我可以做几个 foreach 循环并创建一个我需要的数组,但我不确定是否有更优雅的方法。

从 PHP 5.5 开始,您可以使用 array_column and array_combine 来完成它。

$ret = []; $keys = array_keys($data);
for ($i=0; $i<3; $i++) {
    $ret[$i] = array_combine($keys, array_column($data, $i));
}

其中3nametypetmp_name等的元素个数

Demo.

对于 PHP < 5.5

同样的事情
$ret = []; $keys = array_keys($data);
for ($i=0; $i<3; $i++) {
    $ret[$i] = array_combine($keys, array_map(function($element) use ($i){
        return $element[$i];
    }, $data));
}

Demo.

这里举个例子,为了完整起见,只有两个 foreach:

$ret = [];
foreach($data as $key => $val) {
    $i = 0;
    foreach ($val as $v) {
        $ret[$i][$key] = $v;
        $i++;
    }
}

顺便说一下,无论其他实现如何,我都会使用它。