public function insert($value, $key) { if ($value instanceof HArray) { $value = $value->toArray(); } if ($value instanceof HString) { $value = $value->toString(); } if (Helper::canBeInArray($value)) { $valueArray = $value; } else { $valueArray = [$value]; } if (isset($key)) { if (is_numeric($key)) { list($array, $length) = $this->setSubarrayAndLengthForSequentialArray($key, $valueArray); } elseif (is_string($key)) { list($array, $length) = $this->setSubarrayAndLengthForAssociativeArray($key, $valueArray); } else { throw new \InvalidArgumentException("Invalid array key"); } } else { list($array, $length) = $this->setSubarrayAndLengthWhenNoKeyProvided($valueArray); } $first = $this->arr->slice(0, $length)->toArray(); $lastStartingPoint = sizeof($this->arr) - sizeof($first); $last = $this->arr->slice($length, $lastStartingPoint)->toArray(); return new HArray(array_merge_recursive($first, (array) $array, $last)); }