src/Query/Query.php
protected function flattenBindings(array $bindings):array {
		if(!isset($bindings[0])) {
			return $bindings;
		}

		if(is_object($bindings[0])
		&& method_exists($bindings[0], "toArray")) {
			$bindings = array_map(function($element) {
				if(method_exists($element, "toArray")) {
					return $element->toArray();
				}

				return $element;
			}, $bindings);
		}

		$flatArray = [];
		foreach($bindings as $i => $b) {
			while(isset($b[0])
			&& is_array($b[0])) {
				$merged = [];
				foreach($b as $innerKey => $innerValue) {
					$merged = array_merge(
						$merged,
						$innerValue
					);
				}

				$b = $merged;
			}

			if(!is_array($b)) {
				$b = [$b];
			}

			$flatArray = array_merge($flatArray, $b);
		}

		return $flatArray;
	}
protected function flattenBindings(array $bindings):array {
		if(!isset($bindings[0])) {
			return $bindings;
		}

		if(is_object($bindings[0])
		&& method_exists($bindings[0], "toArray")) {
			$bindings = array_map(function($element) {
				if(method_exists($element, "toArray")) {
					return $element->toArray();
				}

				return $element;
			}, $bindings);
		}

		$flatArray = [];
		foreach($bindings as $i => $b) {
			while(isset($b[0])
			&& is_array($b[0])) {
				$merged = [];
				foreach($b as $innerKey => $innerValue) {
					$merged = array_merge(
						$merged,
						$innerValue
					);
				}

				$b = $merged;
			}

			if(!is_array($b)) {
				$b = [$b];
			}

			$flatArray = array_merge($flatArray, $b);
		}

		return $flatArray;
	}
$bindings can either be :
1) An array of individual values for binding to the question mark placeholder,
passed in as variable arguments.
2) An array containing subarrays containing key-value-pairs for binding to
named placeholders.

Due to the use of variable arguments on the Database and QueryCollection classes,
key-value-pair bindings may be double or triple nested at this point.