PHP中的键值对数组格式化

3

我将尝试通过键来分离一些值。

我的当前数组如下

Array
(
    [name] => Array
        (
            [0] => test1
            [1] => test2
        )

    [type] => Array
        (
            [0] => image/jpeg
            [1] => image/jpeg
        )

    [tmp_name] => Array
        (
            [0] => D:\xampp5\tmp\php5F43.tmp
            [1] => D:\xampp5\tmp\php5F63.tmp
        )

    [error] => Array
        (
            [0] => 0
            [1] => 0
        )

    [size] => Array
        (
            [0] => 49293
            [1] => 20286
        )

)

我的期望数组应该是这样的
Array
( 
 [0] =>(
    [name] =>  test1

    [type] =>  image/jpeg

    [tmp_name] => D:\xampp5\tmp\php5F43.tmp

    [error] => 0

    [size] =>  49293
    )

[1] =>(
    [name] =>  test2

    [type] =>  image/jpeg

    [tmp_name] => D:\xampp5\tmp\php5F63.tmp

    [error] => 0

    [size] =>  20286
    )
)

我尝试了这样做:

$files = array();
$i = 0;
foreach ($array as $key => $value) {
    foreach ($value as $item) {
        $files[$i][] = $item;
        // echo '["'.$key.'"] - '.$item.'<br>';
        $i++;
    }
}

但这只是在增加数组索引,而不是在特定键下进行推送。

请建议我在这里错过了什么。


1
摆脱$i,转而利用第二级键。显然,这些0和1需要成为你的新数组中_第一_级别上的键。 - 04FS
3个回答

7

试一下这个:

$result = [];

foreach ($array as $key => $subarray) {
    foreach ($subarray as $index => $data) {
        $result[$index][$key] = $data;
    }
}

这里有一个示例:链接


5

实现这个结果的一种方法是从数组的第一个元素中获取键,并使用 array_combine 将顶层的键与每个元素的该键的值组合起来,以此迭代每个元素:

$result = array();
$keys = array_keys($array);
foreach (array_keys(current($array)) as $key) {
    $result[$key] = array_combine($keys, array_column($array, $key));
}
print_r($result);

输出:

Array
(
    [0] => Array
        (
            [name] => test1
            [type] => image/jpeg
            [tmp_name] => D:\xampp5\tmp\php5F43.tmp
            [error] => 0
            [size] => 49293
        )
    [1] => Array
        (
            [name] => test2
            [type] => image/jpeg
            [tmp_name] => D:\xampp5\tmp\php5F63.tmp
            [error] => 0
            [size] => 20286
        )
)

在 3v4l.org 上的演示


1
@LemonKazi 谢谢。虽然这个方法充分利用了PHP的数组函数,但你接受的答案肯定会运行得更好。 - Nick

1
$images = array();

foreach ($array as $key => $subarray) {
    foreach ($subarray as $index => $data) {
        $images[$index][$key] = $data;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接