2 declare(strict_types = 1);
34 public static function meltStringItems(array $payload,
string $previousResult =
''): array
37 $items = static::nextItems($payload);
38 foreach ($items as $item) {
39 $resultItem = $previousResult . static::asString($item);
40 if (!empty($payload)) {
41 $results = array_merge(
43 static::meltStringItems($payload, $resultItem)
47 $results[] = $resultItem;
64 public static function meltArrayItems(array $payload, array $previousResult = []): array
67 $items = static::nextItems($payload);
68 foreach ($items as $item) {
69 $resultItems = $previousResult;
70 $resultItems[] = $item;
71 if (!empty($payload)) {
72 $results = array_merge(
74 static::meltArrayItems($payload, $resultItems)
78 $results[] = $resultItems;
83 protected static function nextItems(array &$payload): iterable
85 $items = array_shift($payload);
86 if (is_iterable($items)) {
89 throw new \LogicException(
90 sprintf(
'Expected iterable, got %s', gettype($items)),
97 if (is_string($item)) {
100 if (is_object($item) && method_exists($item,
'__toString')) {
101 return (
string)$item;
103 throw new \LogicException(
104 sprintf(
'Expected string, got %s', gettype($item)),