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

これは構成された形式であり、deatabaseの設計を理解していない人によって明確に行われています。persons次の4列のテーブルを作成する必要があります。

  1. id
  2. 名前
  3. 仕事

次に、各行に各のデータを入力する必要がありますperson。最初の列は一意のIDです。

于 2012-06-06T01:39:26.243 に答える
0

上記は少し複雑だと思います。データベースへのアクセス方法に応じて、以下を簡単に調整できます。最も単純な形式の DB 接続を使用しました。

コード:

<?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
    )

)

ご不明な点がございましたらお知らせください。要するに、スクリプトはキー フィールドの部分文字列を実行して、人/値に基づいて配列キーを作成します。

楽しむ - sEZ

于 2012-06-06T02:00:25.887 に答える