Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony序列化程序返回字符串而不是数组_Php_Symfony - Fatal编程技术网

Php Symfony序列化程序返回字符串而不是数组

Php Symfony序列化程序返回字符串而不是数组,php,symfony,Php,Symfony,我得到了以下实体字段: /** * @var array * * @ORM\Column(name="field", type="array", length=65535, nullable=true) */ private $field; /** * Set field * * @param array $field * * @return array */ public function setField($field) { $this->field= $

我得到了以下实体字段:

/**
 * @var array
 *
 * @ORM\Column(name="field", type="array", length=65535, nullable=true)
 */
private $field;

/**
 * Set field
 *
 * @param array $field
 *
 * @return array
 */
public function setField($field)
{
    $this->field= $field;

    return $this;
}

/**
 * Get field
 *
 * @return array
 */
public function getField()
{
    return $this->field;
}
我收到一个带有以下字段的JSON:

{"field":["9031234567,9031234568,9031234569"]}
并使用Symfony序列化程序代码:

$filter = $em->getRepository('AppBundle:Filter')->findOneBy(['id' => $id]);
$encoders = array(new XmlEncoder(), new JsonEncoder());
$normalizers = array(new ObjectNormalizer());
$serializer = new Serializer($normalizers, $encoders);
$serializer->deserialize($_POST['data'], Filter::class, 'json', array('object_to_populate' => $filter));
$em->persist($filter);
$em->flush();
将我的字段保存到过滤器实体中。问题是,在我的数据库中,我得到以下信息:

a:1:{i:0;s:32:"9031234567,9031234568,9031234569";} //saved as 1 string
虽然我需要这个:

a:3:{i:0;d:9031234567;i:1;d:9031234568;i:2;d:9031234569;} //every number saved in a separate string
有没有办法解决这个问题?多谢各位

UPD我的序列化程序返回以下内容:

["field":"AppBundle\Entity\Filter":private]=>
array(1) {
[0]=>
string(64) "903255, 345345, 46546, 46546, 46546, 46546, 46546, 46546, 
46546,"

如果要将每个字段项存储到数据库中,可以使用ArrayCollection来反序列化json

检查Symfony文档的主题

我想念你的实体注释。 如果要将数组项存储到一个记录中,可以执行以下操作:

/**
 * Constructor.
 */
public function __construct()
{
    $this->fields = new ArrayCollection();
}
添加将项目添加到实体中的方法(已更新)

/**
 * @param array $fields
 * @return      $this
 */
public function addFields(array $fields)
{
    $this->fields = $fields;

    return $this;
}
当您想将数据存储到数据库中时,只需:

$elementsToDb = ['12345', '67890', '1234567'];
$fields = new Field();
$fields->addFields($elementsToDb);
$this->entityManager->persist($fields);
$this->entityManager->flush($fields);

关于。

以及如何在调用$serializer->deserialize()的代码中使用此addField()方法?能否提供什么反序列化程序返回?添加了反序列化程序返回。所以,如果我需要手动获取数组并将其添加到对象,那么使用序列化程序有什么意义呢?可能是因为这些数字在json中存储为字符串(在引号中)?我根据您的反序列化数据修复了我的答案。Check(Updated)block。好的,它是通过改变json并用单独的引号提供每个数字来修复的。谢谢你的帮助