从postgres中检索数组

时间:2017-05-19 09:49:44

标签: php arrays postgresql pdo

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

在一个包含一些值的表中,我尝试在一列中存储一个数组(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']);
}

1 个答案:

答案 0 :(得分:1)

选择数组时,您可以破解显示数组的方式:

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

应该通过php然后使用eval轻松评估它。甚至可以在整个数据集上json_agg,然后是eval:

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