0

我正在开发一个以某种方式在数据库中存储对象数组的系统。

像这样:

key             | value
------------------------------
person_0_name   | David
person_0_age    | 32
person_0_job    | Programmer
person_1_name   | Sue
person_1_age    | 26
person_1_job    | Teacher
person_2_name   | Jon
person_2_age    | 40
person_2_job    | Bus Driver

这是编造的格式吗?我想知道是否有一种简单的方法来反序列化?

4

3 回答 3

1

好吧,你可能想要这样的东西:

$lines = explode("\n",$data);
$keys = array_shift($lines);
array_shift($lines); // discard the line of dashes
$keylist = Array();
foreach(explode("|",$keys) as $k) {
    $keylist[] = trim($k);
}
$out = Array();
foreach($lines as $line) {
    foreach(explode("|",$line) as $i=>$l) {
        $out[$keylist[$i]] = trim($l);
    }
}
// var_dump($out);

唯一的缺点是,如果数据中有任何空格,它不会保留尾随空格 - 可能不会造成巨大损失。

于 2012-06-06T01:38:24.223 回答
1

这是一种虚构的格式,显然是由不了解数据库设计的人完成的。您需要制作一个persons包含四列的表格:

  1. ID
  2. 姓名
  3. 年龄
  4. 工作

然后每一行都应该填充每个person. 第一列是唯一 ID。

于 2012-06-06T01:39:26.243 回答
0

我觉得上面说的有点绕。根据您访问数据库的方式,可以轻松调整以下内容。我使用了最简单的数据库连接形式。

编码:

<?php
$m = mysql_connect('localhost', 'root', 'stack');
mysql_select_db('stack');

$q = mysql_query('SELECT * FROM example');

$arr = array();

while($row = mysql_fetch_assoc($q)){
    $arr[substr($row['key'],0, 8)][substr($row['key'],9)] = $row['value'];
    print_r($arr);
}

结果看起来像

Array
(
    [person_0] => Array
    (
        [name] => David
        [age] => 32
        [job] => Programmer
    )

)

如果您有任何问题,请告诉我。简而言之,脚本在键字段上执行子字符串以根据人员/值创建数组键。

享受 - 经济特区

于 2012-06-06T02:00:25.887 回答