PHP Laravel 5.5集合变平并保留整数键?

GTM*_*eor 3 php flatten collect laravel

我有以下数组:

$array = [
    '2' => ['3' => ['56' => '2'], '6' => ['48' => '2']],
    '4' => ['4' => ['433' => '2', '140' => '2'], '8' => ['421' => '2', '140' => '2']],
    '5' => ['5' => ['88' => '4', '87' => '2']]
];
Run Code Online (Sandbox Code Playgroud)

以下代码(拼合)应通过保留键返回,但不是吗?

collect($array)->flatten(1);
Run Code Online (Sandbox Code Playgroud)

应该给我

[
    '3' => ['56' => '2'],
    '6' => ['48' => '2'],
    '4' => ['433' => '2', '140' => '2'],
    '8' => ['421' => '2', '140' => '2'],
    '5' => ['88' => '4', '87' => '2']
]
Run Code Online (Sandbox Code Playgroud)

但是它丢失了密钥,只给出了数组结果:/我使用错了吗?我应该如何展平和保存密钥?

小智 5

一个不错的解决方案是使用mapWithKeys方法。这将使数组变平并保留键:

collect($array)->mapWithKeys(function($a) {
    return $a;
});
Run Code Online (Sandbox Code Playgroud)

mapWithKeys方法遍历集合并将每个值传递给给定的回调。回调应返回一个包含单个键/值对的关联数组

  • 现在有了箭头功能,它可以更优雅/更短。仅适用于 PHP 7.4 及更高版本 `collect($array)->mapWithKeys(fn($a) => $a);` (3认同)
  • 可以使用“collect($array)->flatMap(fn ($v) => $v)”来实现同样的效果,它还有一个额外的好处,即使用单词“flat”来表达更具表现力的语句,尽管“fn ($ v) => $v` 部分毁了它。 (2认同)