Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种快速、简单的方法来反转PHP中的嵌套数组?_Php_Arrays_Multidimensional Array - Fatal编程技术网

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

有没有一种快速、简单的方法来反转PHP中的嵌套数组?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我所说的反向是指从以下方面: $my_array = array( "header" => array( 0 => "Header 1", 1 => "Header 2" ), "paragraph" => array( 0 => "Paragraph 1", 1 => "Paragraph 2" ) ); 为此: $my_new_array = array(

我所说的反向是指从以下方面:

$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;
  }
}

这将在不使用混凝土键的情况下工作:

$new = array();
foreach ($my_array as $key => $values) {
  foreach ($values as $idx => $value) {
    $new[$idx][$key] = $value;
  }
}
…是我能想到的最好的,虽然它基本上是相同的东西,写得不同。它的优点是更具动态性,因为没有显式指定键名

…是我能想到的最好的,虽然它基本上是相同的东西,写得不同。它的优点是更具动态性,因为没有显式指定键名


不幸的是,没有内置的功能来实现这一点,但由于现有的答案似乎偏向于
foreach
,我正在让这位候选人以最大的
array\u walk
ness参加比赛:

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

.

不幸的是,没有内置的功能来实现这一点,但由于现有的答案似乎偏向于
foreach
,我将以议程上最大的
array\u walk
优势让这位候选人参加比赛:

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

.

为什么
array\u walk()
更好呢?我开始越来越简单地使用它来写东西,因为精英们似乎很喜欢它,但我还没有看到一个很好的解释来解释为什么会这样——它对我来说似乎更不整洁/复杂……@DaveRandom:严格说来,它并不是更好。真的,在他们的头脑中,谁会更喜欢这个版本?它可能更快(尚未测量),并且可以让您编写更多的“模块化”代码(这不适用于此场景),但在这里,我可能会认为它更糟。@DaveRandom:尽管我应该说,能够“功能性思考”对您更有利。因此,尽管我不能代表如此优秀的人说话,但一个可能的原因是,以这种方式训练自己解决问题有助于保持优势。以一种完全非批判性的方式,
array\u walk()
为什么更好?我开始越来越简单地使用它来写东西,因为精英们似乎很喜欢它,但我还没有看到一个很好的解释来解释为什么会这样——它对我来说似乎更不整洁/复杂……@DaveRandom:严格说来,它并不是更好。真的,在他们的头脑中,谁会更喜欢这个版本?它可能更快(尚未测量),并且可以让您编写更多的“模块化”代码(这不适用于此场景),但在这里,我可能会认为它更糟。@DaveRandom:尽管我应该说,能够“功能性思考”对您更有利。因此,尽管我不能代表精英们说话,一个可能的原因是,通过这种方式训练自己解决问题有助于保持优势。