* @author Daniel <daniel (at) danielsmedegaardbuus (dot) dk> * @author Gabriel Sobrinho <gabriel (dot) sobrinho (at) gmail (dot) com> */ Arr::macro('merge_distinct', function (array $array1, array $array2) { $merged = $array1; foreach ($array2 as $key => &$value) { if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) { $merged[$key] = Arr::merge_distinct($merged[$key], $value); } else { $merged[$key] = $value; } } return $merged; }); /** * Combination of array_merge and array_merge_recursive, does merge news keys into an existing array, but * overrides values instead of creating arrays from duplicate values. * * this is the splat version of Arr::merge_distinct which can only handle two input arrays. * * @return array */ Arr::macro('merge', function () { $result = []; $args = func_get_args(); $args_limit = func_num_args(); for ($i = 0; $i < $args_limit; $i++) { $result = Arr::merge_distinct($result, $args[$i]); } return $result; });
<?php namespace Propaganistas\LaravelHelperMacros\Macros; use Illuminate\Support\Arr; if (!Arr::hasMacro('expand')) { /** * Expands a dotted associative array. The inverse of Arr::dot(). * * @param array $array * @return array */ Arr::macro('expand', function (array $array) { $return = []; foreach ($array as $key => $value) { array_set($return, $key, $value); } return $return; }); }