Php 如何重新构造多维数组?

Php 如何重新构造多维数组?,php,multidimensional-array,Php,Multidimensional Array,我的阵列有问题基本上这就是我的问题: $test = array( "image" => array( "name" => array( "name.jpg", "name2.jpg", "name3.jpg" ), "type" => array( "image/jpeg", "imag

我的阵列有问题基本上这就是我的问题:

$test = 
array(
  "image" => array(
        "name" => array(
            "name.jpg",
            "name2.jpg",
            "name3.jpg"
        ),
        "type"  => array(
                "image/jpeg",
                "image/jpeg",
                "image/jpeg",
        ),
        "size" => array(
          118108,
          589788,
          1387074
        )
    )
)
这就是我想要的:

$test2 =
array(
    "0" => array(
        "name" => "name.jpg",
        "type" => "image/jpeg",
        "size" => 118108
    ),
    "1" => array(
        "name" => "name2.jpg",
        "type" => "image/jpeg",
        "size" => 589788
    ),
    "2" => array(
        "name" => "name3.jpg",
        "type" => "image/jpeg",
        "size" => 1387074
    )

)
因此,我需要某种脚本,将第一个数组结构重做为第二个数组结构

我认为这样做:

<?php

$result = array();

foreach($test['image'] as $key=>$data){
foreach($data as $id=>$val){
    $result[$id][$key] = $val;
}
}

?>

这应该可以做到:

$test = 
array(
  "image" => array(
        "name" => array(
            "name.jpg",
            "name2.jpg",
            "name3.jpg"
        ),
        "type"  => array(
                "image/jpeg",
                "image/jpeg",
                "image/jpeg",
        ),
        "size" => array(
          118108,
          589788,
          1387074
        )
    )
);

$output=array();

foreach(range(0,(count($test["image"])-1)) as $i)
{
  $output[$i]=array($test["image"]["name"][$i],$test["image"]["type"][$i],$test["image"]["size"][$i]);
}

var_dump($output);

PHP语法允许多种方法实现此目的,例如foreach循环(项的键始终相同):

或者在以下情况下,在“外观不好”中使用
array\u shift
/
array\u pop

while(
  ($name = array_pop( $test["image"]["name"])) &&
  ($type = array_pop( $test["image"]["type"])) &&
  ($size = array_pop( $test["image"]["size"]))
) {
    $output[] = array(
      'name' => $name,
      'type' => $type,
      'size' => $size,
    );
}

第二种方法会破坏输入数组,并且比第一种方法更难读取,但它可以确保不存在数组键的问题。

这里有一种更通用的解决方案。它将用任何属性名重建数组。我还将其包装在一个函数中,以使其更易于使用

使用:

function func(array $input)
{
    $result = array();

    foreach ($input as $type => $properties) {
        foreach ($properties as $name => $values) {
            for ($i = 0; $i < count($values); $i++) {
                $result[$i][$name] = $values[$i];
            }
        }
    }

    return $result;
}

希望有帮助

实际上没有什么特别的,我只是在谷歌上搜索了一些随机脚本,但我找不到我需要的
function func(array $input)
{
    $result = array();

    foreach ($input as $type => $properties) {
        foreach ($properties as $name => $values) {
            for ($i = 0; $i < count($values); $i++) {
                $result[$i][$name] = $values[$i];
            }
        }
    }

    return $result;
}
Array
(
    [0] => Array
        (
            [name] => name.jpg
            [type] => image/jpeg
            [size] => 118108
        )

    [1] => Array
        (
            [name] => name2.jpg
            [type] => image/jpeg
            [size] => 589788
        )

    [2] => Array
        (
            [name] => name3.jpg
            [type] => image/jpeg
            [size] => 1387074
        )

)