将PHP数组转换为PostgreSQL数组并返回

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

[我有一个页面,我正在创建一个包含选择框中的项目的PHP数组,我使用json_encode将数组转换为可插入字段类型为TEXT []的PostgreSQL数据库中的字符串。但是,当我取回字符串并对其调用json_decode时,我得到一个空白字符串。

function encode_array($libraries)
{
    $encoded = json_encode($libraries);
    // Replace the square brackets with curly braces for PostgreSQL TEXT[] field formatting.
    $encoded = str_replace('[', '{', $encoded);
    $encoded = str_replace(']', '}', $encoded);
    return $encoded;
}

function decode_array($libraries)
{
    $decodedStr = str_replace('{', '[', $libraries);
    $decodedStr = str_replace('}', ']', $decodedStr);
    $decoded = json_decode($decodedStr);
    return $decoded;
}

因此,基本上,我从一个PHP数组开始,然后将其插入数据库。因此,假设我有一个看起来像这样的数组:

$libraries = array('LIBRARY_01', 'LIBRARY_02', 'LIBRARY_03');

我应该得到一个看起来像这样的数据库条目:

'{LIBRARY_01, LIBRARY_02, LIBRARY_03}'

然后解码后,我应该再次得到一个具有与以前相同值的PHP数组。

插入/编码似乎可以正常工作,因为我可以在数据库中看到该数组,并且我认为如果编码的字符串格式错误,它将抱怨。

有人知道我在哪里错吗?作为参考,如果需要,我正在使用PostgreSQL 9.3和PHP 5.6。

EDIT:如果出现混淆,该数组只是一个简单的字符串数组,在这些字符串中的任何字符串中都没有特殊符号,只是字母数字字符。我将方括号全部替换为花括号的原因是因为json_encode输出的JSON字符串将被括在方括号中,但是当我将其传递给TEXT []时,数据库要求将其括在方括号中字段。

php database postgresql postgresql-9.3
1个回答
0
投票

所以,这里的主要问题是json格式使用键值对,而推断的索引似乎不起作用。其次,将json_decoded([string],TRUE)与TRUE标志一起使用,可以为您提供一个关联数组,而不是对象。

尝试运行所有这些,以更好地了解您拥有的内容:

<?php 

//$libraries = array('0'=>'LIBRARY_01', '1'=>'LIBRARY_02', '2'=>'LIBRARY_03');    //this will not work

$libraries = array('one'=>'LIBRARY_01', 'two'=>'LIBRARY_02', 'three'=>'LIBRARY_03');
var_dump($libraries);
echo '<br>';
$encoded = json_encode($libraries);
echo $encoded;
echo '<br>';
$encoded = str_replace('[', '{', $encoded);
$encoded = str_replace(']', '}', $encoded);
echo 'String: '.$encoded;

echo '<br>';
echo '<br>';

$stdObj = json_decode($encoded);
echo 'var_dump: ';
var_dump($stdObj);
echo '<br>';
echo 'json_encode: '.json_encode($stdObj);
echo '<br>';
foreach($stdObj as $element){
    echo $element;
    echo '<br>';
}
echo '<br>';
echo '<br>';


$array = json_decode($encoded, TRUE);
echo 'var_dump associative: ';
var_dump($array);
echo '<br>';
echo 'array[one]: '.$array[one];
echo '<br>';

echo '<br>';
echo '<br>';

echo 'json_encode: '.json_encode($array);
echo '<br>';



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