有没有一种快速、简单的方法来反转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:尽管我应该说,能够“功能性思考”对您更有利。因此,尽管我不能代表精英们说话,一个可能的原因是,通过这种方式训练自己解决问题有助于保持优势。