pluck($key, $arr, \false); } } return $values; } /** * Determine whether given array is associative. * * @param array $arr * @return bool */ private function isAssoc(array $arr) { return \array_keys($arr) !== \range(0, \count($arr) - 1); } /** * Just like array_filter(), but preserves falsey values except null. * * @param array $arr * @return array */ private function arrayFilterRemoveNull(array $arr) { return \array_filter($arr, function ($element) { if (!\is_null($element)) { return \true; } return \false; }); } /** * Return a subset of an array, like pluckArray, without modifying the original array. * * @param array $keys * @param array $arr * @return array */ private function subsetArray(array $keys, array $arr) { return \array_intersect_key($arr, \array_flip($keys)); } /** * A method, similar to PHP's `array_merge_recursive`, with two differences. * * 1. Keys in $array2 take precedence over keys in $array1. * 2. Non-array keys found in both inputs are not transformed into an array * and appended. Rather, the value in $array2 is used. * * @param array $array1 * @param array $array2 * @return array */ private function arrayMergeRecursive(array $array1, array $array2) { foreach ($array2 as $key => $value) { if (\array_key_exists($key, $array1) && \is_array($array1[$key]) && \is_array($value)) { $array1[$key] = $this->isAssoc($array1[$key]) && $this->isAssoc($value) ? $this->arrayMergeRecursive($array1[$key], $value) : \array_merge($array1[$key], $value); } else { $array1[$key] = $value; } } return $array1; } }