将字符串(即数组)转换回数组

Convert string (which is array) back to array

我遇到了一个问题,如果我从数据库中检索一条记录,它将 return 作为一个字符串。但我不想要那个,因为它应该是一个数组:

var_dump($data)

returns

string(654) "Array ( [0] => Array ( [1] => 17-6-2015 [2] => Livingwater TEST [3] => J. Luttik [4] => E. Luttik [5] => Annemarie, Rosy [id] => 7 ) [1] => Array ( [1] => 21-6-2015 [2] => Celebration [3] => P. Brenner [4] => B. Nobbe [5] => Heleen, Laurens [id] => 8 ) [2] => Array ( [1] => 24-6-2015 [2] => Celebration [3] => C. Visser [4] => E. Luttik [5] => Annet, Elsemijn [id] => 9 ) ) "

我该如何解决这个问题?

我想我明白了,它存储在数据库中是错误的。它应该存储为 json_encode($data),检索为 json_decode($data, true)

但另一种方法是将其存储为 serialize($data) 并使用 unserialize($data)

检索它

我会使用 serialize to save the info in the db and unserialize 将其检索到可用的东西。我相信这是最好的方法。你也可以使用 json_encode 和 json_decode,但我更喜欢 [un]serialize

好吧,事实很清楚,存储的数据存储错了!要将此字符串重建为数组,您要做的不仅仅是以正确的方式存储它。

所以解决方案可能来自@sanderbee:Convert var_dump of array back to array variable

或者我建议的解决方案是以正确的方式存储它们。

数据是一个数组,所以这意味着多重数据。要么将它保存为序列化字符串,这样就可以反序列化它,要么我认为更好的解决方案是数据库内部的 1-N 关系,例如:

Table:人类

行数:

  • ID
  • 姓名

Table:宠物

  • ID
  • Human_ID
  • 种族

所以 1 (ONE) 人可以拥有 N(0 到无穷大) 宠物。

Table:人类

  • 1、乔治·布什
  • 2,巴拉克·奥巴马

Table:宠物

  • 1, 1, 狗
  • 2, 1, 猫
  • 3、1,海豚
  • 4、2、普京

虽然乔治布什有 3 只宠物:一只狗、一只猫和一只海豚。巴拉克·奥巴马 (Barack Obama) 只养了一只普京宠物。

通过这种方式,您可以通过一个 SQL-使用 JOIN 语句的查询轻松获取所有数据。

$db->query( 'SELECT Human.Name, Pets.race FROM Human JOIN Pets ON ( Human.id = Pets.Human_ID ) ' );

看起来比反序列化更费力?但是更干净,如果你有很多数据,数据库会比..或者应该更快..而且它更干净。对我来说看起来更专业。

编辑

你的个人资料看起来你的经验应该足以知道这一点..你 "HAVE TO" 有可能在数据库中使用这些记录吗?如果是这样,那么来自 sanderbee 的第一个选项是 "must do"..