You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ymww_backend/addons/epay/library/v3/Yansongda/Supports/Functions.php

74 lines
1.9 KiB

1 year ago
<?php
declare(strict_types=1);
namespace Yansongda\Supports;
use Closure;
if (!function_exists('collect')) {
/**
* Create a collection from the given value.
*/
function collect(array $value = []): Collection
{
return new Collection($value);
}
}
if (!function_exists('value')) {
/**
* Return the default value of the given value.
*
* @param mixed $value
*
* @return mixed
*/
function value($value)
{
return $value instanceof Closure ? $value() : $value;
}
}
if (!function_exists('data_get')) {
/**
* Get an item from an array or object using "dot" notation.
*
* @param array|int|string|null $key
* @param mixed|null $default
* @param mixed $target
*/
function data_get($target, $key, $default = null)
{
if (is_null($key)) {
return $target;
}
$key = is_array($key) ? $key : explode('.', is_int($key) ? (string) $key : $key);
while (!is_null($segment = array_shift($key))) {
if ('*' === $segment) {
if ($target instanceof Collection) {
$target = $target->all();
} elseif (!is_array($target)) {
return value($default);
}
$result = [];
foreach ($target as $item) {
$result[] = data_get($item, $key);
}
return in_array('*', $key) ? Arr::collapse($result) : $result;
}
if (Arr::accessible($target) && Arr::exists($target, $segment)) {
$target = $target[$segment];
} elseif (is_object($target) && isset($target->{$segment})) {
$target = $target->{$segment};
} else {
return value($default);
}
}
return $target;
}
}