PHP数组结构更改

PHP数组结构更改,php,arrays,loops,multidimensional-array,Php,Arrays,Loops,Multidimensional Array,这不应该让我很困惑,但我希望能扭转这一局面: array:3 [▼ "subject" => array:2 [▼ 0 => "math" 1 => "english" ] "grade" => array:2 [▼ 0 => "a" 1 => "b" ] "received" => array:2 [▼ 0 => "2017" 1 => "20

这不应该让我很困惑,但我希望能扭转这一局面:

array:3 [▼
  "subject" => array:2 [▼
        0 => "math"
        1 => "english"
  ]
 "grade" => array:2 [▼
      0 => "a"
      1 => "b"
  ]
  "received" => array:2 [▼
      0 => "2017"
      1 => "2016"
  ]
]
为此:

array:2 [▼
  "0" => array:3 [▼
    "subject" => "math"
    "grade" => "a"
    "received" => "2017"
  ]
  "1" => array:3 [▼
    "subject" => "english"
    "grade" => "b"
    "received" => "2016"
  ]
]
尝试了两种不同的方式循环,但似乎从未得到我想要的结果,任何帮助都将不胜感激

$keys = array_keys($array);
$result = array_map(
    function (...$values) use ($keys) { return array_combine($keys, $values); }, 
    ...array_values($array)
);
基本上是这样,但重复性较少:

array_map(
    function ($subject, $grade, $received) {
        return [
            'subject' => $subject,
            'grade' => $grade, 
            'received' => $received
        ];
    },
    $array['subject'],
    $array['grade'],
    $array['received']
)
有关更多说明,请参阅手册和

基本上是这样,但重复性较少:

array_map(
    function ($subject, $grade, $received) {
        return [
            'subject' => $subject,
            'grade' => $grade, 
            'received' => $received
        ];
    },
    $array['subject'],
    $array['grade'],
    $array['received']
)
有关详细说明,请参阅手册。

简单版本:

$arr1 = array(...);
$arr2 = array();

foreach ($arr1 as $k => $v) {
    foreach ($v as $x => $y) {
        $arr2[$x][$k] = $y;
    }
}
但您应该添加条件,如果数组元素不存在,请创建它,否则可能会出错,具体取决于您的PHP配置。

简单版本:

$arr1 = array(...);
$arr2 = array();

foreach ($arr1 as $k => $v) {
    foreach ($v as $x => $y) {
        $arr2[$x][$k] = $y;
    }
}

但是您应该添加条件,如果数组元素不存在,则创建它,否则可能会出现错误,具体取决于您的PHP配置。

如何显示其中一个循环?如何显示其中一个循环?第一种方法抛出错误“array_combine():两个参数的元素数应该相等”,但第二种方法效果很好,感谢@decezeFirst way抛出了一个错误“array_combine():两个参数的元素数应该相等”,但是第二个答案工作得很好,感谢@decezeFirst way您指的是
$arr2[$x][$k]=…
创建错误吗?不,永远不会。显式支持隐式中间数组创建。您是指
$arr2[$x][$k]=…
创建错误吗?不,永远不会。显式支持隐式中间数组创建。