2012-06-06 2 views
0

Я работаю над системой, которая определенным образом хранит массив объектов в db.Сериализация массива PHP

Как это:

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 

Является ли это сделано до формата? Мне интересно, есть ли простой способ неэтериализовать это?

ответ

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

Единственным недостатком является то, что он не держит завершающие пробелы, если таковые имеются в данных - вероятно, не огромная потеря.

+0

Извините, я думаю, что смутил вас. Таблица в вопросе имеет два столбца, и каждая строка на самом деле является строкой. –

1

Это оформленный формат и четко сделан кем-то, кто не понимает дизайн базы данных. Вам нужно сделать таблицу для persons с четырьмя колоннами:

  1. Ид
  2. имя
  3. возраст
  4. работа

Затем каждая строка должна быть заполнена данными для каждого person. Первый столбец является уникальным идентификатором.

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 
    ) 

) 

Позвольте мне знать, если у вас есть какие-либо вопросы .. Короче говоря, сценарий делает подстроку на ключевое поле, чтобы создать массив ключи, основанные на человеке/ценности.

Enjoy - sEZ

Смежные вопросы