| 
<?phpdeclare(strict_types=1);
 namespace ParagonIE\Ionizer\Filter;
 
 use ParagonIE\Ionizer\InvalidDataException;
 use ParagonIE\Ionizer\Util;
 
 /**
 * Class IntArrayFilter
 * @package ParagonIE\Ionizer\Filter
 */
 class IntArrayFilter extends ArrayFilter
 {
 /**
 * @var int
 */
 protected $default = 0;
 
 /**
 * @var string
 */
 protected $type = 'int[]';
 
 /**
 * Apply all of the callbacks for this filter.
 *
 * @param mixed $data
 * @param int $offset
 * @return mixed
 * @throws \TypeError
 * @throws InvalidDataException
 */
 public function applyCallbacks($data = null, int $offset = 0)
 {
 if ($offset === 0) {
 if (\is_null($data)) {
 return parent::applyCallbacks($data, 0);
 } elseif (!\is_array($data)) {
 throw new \TypeError(
 \sprintf('Expected an array of integers (%s).', $this->index)
 );
 }
 /** @var array<string, int> $data */
 $data = (array) $data;
 if (!Util::is1DArray($data)) {
 throw new \TypeError(
 \sprintf('Expected a 1-dimensional array (%s).', $this->index)
 );
 }
 /**
 * @var string|int|float|bool|array|null $val
 */
 foreach ($data as $key => $val) {
 if (\is_array($val)) {
 throw new \TypeError(
 \sprintf('Expected a 1-dimensional array (%s).', $this->index)
 );
 }
 if (\is_int($val) || \is_float($val)) {
 $data[$key] = (int) $val;
 } elseif (\is_null($val) || $val === '') {
 $data[$key] = $this->default;
 } elseif (\is_string($val) && \preg_match('#^\-?[0-9]+$#', $val)) {
 $data[$key] = (int) $val;
 } else {
 throw new \TypeError(
 \sprintf('Expected an integer at index %s (%s).', $key, $this->index)
 );
 }
 }
 return parent::applyCallbacks($data, 0);
 }
 return parent::applyCallbacks($data, $offset);
 }
 }
 
 |