【问题标题】:Retrieve array from postgres从 postgres 中检索数组
【发布时间】:2017-10-19 09:22:40
【问题描述】:

非常基本的问题,但找不到解决方案。

在包含一些值的表中,我尝试在 1 列中存储一个数组 (int[]) 并检索它。存储和搜索工作正常,但如果我选择它,我会在 php 中将其作为字符串获取。

餐桌周

col id (int) = 1
col days (int[]) = {1,1,1,1,1,0,0}

PHP

$query = SELECT id, days, manyother FROM week //array_to_json(days) does the same result
$pdo->setAttribute( PDO::ATTR_CASE, PDO::CASE_NATURAL );
$result = $pdo->query($query);

$test = $result->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($test)

返回:

id: 1
days: "[1,1,1,1,1,0,0]"
manyother: ""

我确定我错过了 json_encode/decode 的一些内容 编辑:它不受 json_encode 的影响,我对其进行了调试,然后它返回了类似 '[1,1,1,1,1,0,0]' 的值。

编辑 2:找到了一个可行的解决方案,但将加载时间增加了 15* 倍:D 所以问题仍然存在,但我目前有一个解决方法。

foreach($test as $key => $value){
        $test[$key]['days'] = json_decode($value['days']);
}

【问题讨论】:

    标签: php arrays postgresql pdo


    【解决方案1】:

    选择数组时,可以修改数组的显示方式:

    t=# select json_build_array(array[1,2,3,4])->0;
     ?column?
    -----------
     [1,2,3,4]
    (1 row)
    

    它应该很容易被 php 然后用 eval 评估。甚至json_agg 对整个数据集进行评估:

    t=# select json_agg(s162) from s162;
    json_agg
    [{"i":0,"a":[1,2,3,4]},
     {"i":1,"a":[1,4]}]
    (1 row)
    Time: 0.281 ms
    

    【讨论】:

    • workdays:"[1,1,1,1,1,0,0]" 仍以字符串形式返回。我用 Select json_build_array(days)->0 FROM week
    • 当然。你仍然需要评估字符串来获取数组
    • 是的,我的问题是如何做到这一点。目前我从 postgress 得到一个字符串,但我想要一个数组。
    • 可能通过在行之间循环和$day=eval($test[$i]["day"]);
    • 抱歉,我没有问,但你能否解释得更清楚一点,我不明白。您编写它的方式,它将整个表作为数组返回,但我只需要转换一列值。
    猜你喜欢
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多