Просмотр исходного кода

New macros

- Recursively convert array to collection
Mr. CaT 1 год назад
Родитель
Сommit
637fcde125
2 измененных файлов с 45 добавлено и 0 удалено
  1. 44 0
      app/Providers/Macros/CollectionProvider.php
  2. 1 0
      config/app.php

+ 44 - 0
app/Providers/Macros/CollectionProvider.php

@@ -0,0 +1,44 @@
+<?php
+
+namespace App\Providers\Macros;
+
+use Illuminate\Support\Collection;
+use Illuminate\Support\ServiceProvider;
+
+class CollectionProvider extends ServiceProvider
+{
+    /**
+     * Register services.
+     */
+    public function register(): void
+    {
+        //
+    }
+
+    /**
+     * Bootstrap services.
+     */
+    public function boot(): void
+    {
+        /**
+         * Recursively convert array to collection
+         */
+        Collection::macro('recursive', function () {
+            $this->whenNotEmpty($recursive = function ($collection) use (&$recursive) {
+                if (is_array($collection)) {
+                    return $recursive(new static($collection));
+                } else if ($collection instanceof Collection) {
+                    $collection->transform(function ($value, $key) use ($collection, $recursive) {
+                        return $collection->{$key} = $recursive($value);
+                    });
+                } else if (is_object($collection)) {
+                    foreach ($collection as $k => &$v) {
+                        $collection->{$k} = $recursive($v);
+                    }
+                }
+
+                return $collection;
+            });
+        });
+    }
+}

+ 1 - 0
config/app.php

@@ -172,6 +172,7 @@ return [
          * Macros providers
          */
         App\Providers\Macros\ArrayProvider::class,
+        App\Providers\Macros\CollectionProvider::class,
     ])->toArray(),
 
     /*