为什么 PHP 不提供 intarray 运算符?

问题描述 投票:0回答:1

PostgreSQL 版本 14

我的查询从 pgAdmin 运行时的行为与从 PHP 运行时的行为不同。

SELECT * FROM UNNEST('{1,2,3,4,5}'::integer[] - '{2,4}'::integer[])

当我从 pgAdmin 运行它时,它工作正常。当我使用 PDO 通过 PHP 传递它时,我得到 错误:运算符不存在:整数[] - 整数[]。

该数组运算符由 intarray 模块提供。 CREATE EXTENSION intarray 告诉我扩展已安装。这就像 intarray 模块由于某种原因不可用于 PHP 进程。

有人能指出我正确的方向吗?

php postgresql pdo
1个回答
0
投票

要解决 PHP 中无法使用

int[]
运算符的问题,您需要了解 PHP 本身并不支持函数参数中数组元素的类型提示。但是,您可以通过使用 PHP 的
is_array
函数以及函数内的类型检查来实现解决方法。

以下是如何实现此目标的示例:

function processIntArray(array $input) {
    foreach ($input as $element) {
        if (!is_int($element)) {
            throw new InvalidArgumentException("All elements in the array must be integers.");
        }
    }

    // Proceed with your logic here
}

// Example usage:
try {
    processIntArray([1, 2, 3, 4]);
    echo "Array processed successfully.";
} catch (InvalidArgumentException $e) {
    echo $e->getMessage();
}

在此功能中:

  1. 我们使用
    array
    作为类型提示来确保输入是一个数组。
  2. 我们使用
    is_int
    循环遍历数组的每个元素以检查它是否是整数。
  3. 如果任何元素不是整数,我们会抛出一个
    InvalidArgumentException

此方法可确保您的函数仅处理整数数组。

© www.soinside.com 2019 - 2024. All rights reserved.