public static function inArray($needle, $haystack, $wildcard = '*') 
	{
		$inArray = false;

		// if $needle, $haystack, and $wildcard are given
		if ($needle !== null && $haystack !== null && $wildcard !== null) {
			// if $needle is a string
			if (is_string($needle)) {
				// if $haystack is an array
				if (is_array($haystack)) {
					// if $wildcard is a string
					if (is_string($wildcard)) {
						// if $needle contains the wildcard character
						if (strpos($needle, $wildcard) !== false) {
							// determine if the neeedle starts or ends with the wildcard
							$startsWith = \Jstewmc\PhpHelpers\Str::startsWith($needle, $wildcard);
							$endsWith   = \Jstewmc\PhpHelpers\Str::endsWith($needle, $wildcard);
							// set the *actual* needle
							$needle = str_ireplace($wildcard, '', $needle);
							// loop through the haystack
							foreach ($haystack as $value) {
								if ($startsWith && $endsWith) {
									$inArray = strpos($value, $needle) !== false;
								} elseif ($startsWith) {
									$inArray = \Jstewmc\PhpHelpers\Str::endsWith($value, $needle);
								} else {
									$inArray = \Jstewmc\PhpHelpers\Str::startsWith($value, $needle);
								}
								// if the needle is in the array, stop looking
								if ($inArray) {
									break;
								}
							}	
						} else {
							$inArray = in_array($needle, $haystack);
						}
					} else {
						throw new \InvalidArgumentException(
							__METHOD__."() expects parameter three, the wildcard character, to be a string"
						);
					}
				} else {
					throw new \InvalidArgumentException(
						__METHOD__."() expects parameter two, the haystack, to be an array"
					);
				}
			} else {
				throw new \InvalidArgumentException(
					__METHOD__."() expects parameter one, the needle, to be a string"
				);
			}
		} else {
			throw new \BadMethodCallException(
				__METHOD__."() expects two or three parameters: needle, haystack, and wildcard"
			);
		}

		return $inArray;
	}