aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/patrickschur/language-detection/src/LanguageDetection/LanguageResult.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/patrickschur/language-detection/src/LanguageDetection/LanguageResult.php')
-rw-r--r--vendor/patrickschur/language-detection/src/LanguageDetection/LanguageResult.php149
1 files changed, 149 insertions, 0 deletions
diff --git a/vendor/patrickschur/language-detection/src/LanguageDetection/LanguageResult.php b/vendor/patrickschur/language-detection/src/LanguageDetection/LanguageResult.php
new file mode 100644
index 000000000..5b89ff44e
--- /dev/null
+++ b/vendor/patrickschur/language-detection/src/LanguageDetection/LanguageResult.php
@@ -0,0 +1,149 @@
+<?php
+
+declare(strict_types = 1);
+
+namespace LanguageDetection;
+
+/**
+ * Class LanguageResult
+ *
+ * @copyright Patrick Schur
+ * @license https://opensource.org/licenses/mit-license.html MIT
+ * @author Patrick Schur <patrick_schur@outlook.de>
+ * @package LanguageDetection
+ */
+class LanguageResult implements \JsonSerializable, \IteratorAggregate, \ArrayAccess
+{
+ const THRESHOLD = .025;
+
+ /**
+ * @var array
+ */
+ private $result = [];
+
+ /**
+ * LanguageResult constructor.
+ * @param array $result
+ */
+ public function __construct(array $result = [])
+ {
+ $this->result = $result;
+ }
+
+ /**
+ * @param mixed $offset
+ * @return bool
+ */
+ public function offsetExists($offset): bool
+ {
+ return isset($this->result[$offset]);
+ }
+
+ /**
+ * @param mixed $offset
+ * @return mixed|null
+ */
+ public function offsetGet($offset): ?float
+ {
+ return $this->result[$offset] ?? null;
+ }
+
+ /**
+ * @param mixed $offset
+ * @param mixed $value
+ * @return void
+ */
+ public function offsetSet($offset, $value): void
+ {
+ if (null === $offset) {
+ $this->result[] = $value;
+ } else {
+ $this->result[$offset] = $value;
+ }
+ }
+
+ /**
+ * @param mixed $offset
+ */
+ public function offsetUnset($offset): void
+ {
+ unset($this->result[$offset]);
+ }
+
+ /**
+ * @return array
+ */
+ public function jsonSerialize(): array
+ {
+ return $this->result;
+ }
+
+ /**
+ * @return string
+ */
+ public function __toString(): string
+ {
+ return (string) \key($this->result);
+ }
+
+ /**
+ * @param \string[] ...$whitelist
+ * @return LanguageResult
+ */
+ public function whitelist(string ...$whitelist): LanguageResult
+ {
+ return new LanguageResult(\array_intersect_key($this->result, \array_flip($whitelist)));
+ }
+
+ /**
+ * @param \string[] ...$blacklist
+ * @return LanguageResult
+ */
+ public function blacklist(string ...$blacklist): LanguageResult
+ {
+ return new LanguageResult(\array_diff_key($this->result, \array_flip($blacklist)));
+ }
+
+ /**
+ * @return array
+ */
+ public function close(): array
+ {
+ return $this->result;
+ }
+
+ /**
+ * @return LanguageResult
+ */
+ public function bestResults(): LanguageResult
+ {
+ if (!\count($this->result))
+ {
+ return new LanguageResult;
+ }
+
+ $first = \array_values($this->result)[0];
+
+ return new LanguageResult(\array_filter($this->result, function ($value) use ($first) {
+ return ($first - $value) <= self::THRESHOLD ? true : false;
+ }));
+ }
+
+ /**
+ * @return \ArrayIterator
+ */
+ public function getIterator(): \ArrayIterator
+ {
+ return new \ArrayIterator($this->result);
+ }
+
+ /**
+ * @param int $offset
+ * @param int|null $length
+ * @return LanguageResult
+ */
+ public function limit(int $offset, int $length = null): LanguageResult
+ {
+ return new LanguageResult(\array_slice($this->result, $offset, $length));
+ }
+}