有没有一种快速、简单的方法来反转 PHP 中的嵌套数组


Is there a quick, easy way to reverse nested arrays in PHP?

反转我的意思是:

$my_array = array(
    "header" => array(
        0 => "Header 1",
        1 => "Header 2"
    ),
    "paragraph" => array(
        0 => "Paragraph 1",
        1 => "Paragraph 2"
    )
);

对此:

$my_new_array = array(
    0 => array(
        "header" => "Header 1",
        "paragraph" => "Paragraph 1"
    ),
    1 => array(
        "header" => "Header 2",
        "paragraph" => "Paragraph 2"
    )
);

我知道我可以做到这一点:

$my_new_array = array();
foreach ( $my_array["header"] as $key => $header ){
    if ( !is_array( $my_new_array[ $key ] ) ){
        $my_new_array[ $key ] = array();
    }
    $my_new_array[ $key ]["header"] = $header;
}
foreach ( $my_array["paragraph"] as $key => $paragraph ){
    $my_new_array[ $key ]["paragraph"] = $paragraph;
}

但我想知道是否有一个快速的 PHP 函数来做到这一点或更优化的方法。我在PHP函数目录中找不到任何这样的函数,我想不出更理想的方法!

干杯

这将在不使用具体键的情况下工作:

$new = array();
foreach ($my_array as $key => $values) {
  foreach ($values as $idx => $value) {
    $new[$idx][$key] = $value;
  }
}
$my_new_array = array();
array_walk($my_array, function($innerArray, $key) use (&$my_new_array) {
  foreach ($innerArray as $index => $val) {
    $my_new_array[$index][$key] = $val;
  }
});

。是我能想到的最好的,尽管它基本上是写得不同的相同的东西。它确实具有更加动态的优点,因为没有明确指定键名。

看到它工作

不幸的是,没有内置函数来做到这一点,但由于现有的答案似乎有利于foreach我正在以最大的array_walk将这个候选人列入竞选议程:

$result = array();
array_walk($array, function($rows, $propKey) use (&$result) {
    array_walk($rows, function($val, $row) use($propKey, &$result) { 
        $result[$row][$propKey] = $val;
    });
});

看到它的实际效果