【问题标题】:PHP Laravel 5.5 collections flatten and keep the integer keys?PHP Laravel 5.5 集合展平并保留整数键?
【发布时间】:2018-05-25 05:19:17
【问题描述】:

我有以下数组:

$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']]
];

以下代码(展平)应该通过保留键返回它,但它没有?

collect($array)->flatten(1);

应该给我

[
    '3' => ['56' => '2'],
    '6' => ['48' => '2'],
    '4' => ['433' => '2', '140' => '2'],
    '8' => ['421' => '2', '140' => '2'],
    '5' => ['88' => '4', '87' => '2']
]

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

【问题讨论】:

  • 我不相信flatten 支持维护密钥 - 如果较低级别的密钥不是唯一的,您希望它如何工作?
  • 好的,谢谢。回想起来为什么 flatten 不能保留键是有道理的。

标签: php laravel flatten collect


【解决方案1】:

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

collect($array)->mapWithKeys(function($a) {
    return $a;
});

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

【讨论】:

  • 现在可以更优雅/更短的箭头功能。仅适用于 PHP 7.4 及更高版本collect($array)->mapWithKeys(fn($a) => $a);
  • 非常好,谢谢。由于地图不会变平,因此带有键的地图会变得不直观。
  • 工作不错。谢谢
【解决方案2】:

你不能在这里使用flatten()。我没有优雅的解决方案,但我已经对此进行了测试,它非常适合您的阵列:

foreach ($array as $items) {
    foreach ($items as $key => $item) {
        $newArray[$key] = $item;
    }
}

dd($newArray);

【讨论】:

  • 这确实有效。试图避免foreach'es,但确实如此。谢谢。
猜你喜欢
  • 2021-05-29
  • 2017-10-08
  • 2014-05-08
  • 2017-06-11
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
  • 2013-07-01
  • 2021-09-14
相关资源
最近更新 更多