Не удается получить ключи в базе данных для анализа как части массива - PullRequest
0 голосов
/ 22 декабря 2009

В моей базе данных есть таблица, которая до сих пор отлично подходила для хранения вещей в более чем одном объекте.Но я хочу иметь возможность преобразовать его в многообъектный массив.

Вот данные, которые связаны с этим новым «объектом» (в mysql):

    uid     field              value
    page:1  shop[2].location    In Shops, Dundas Arcades,Middlesbrough, TS1 1HT
    page:1  shop[1].location    5a High Street, Stockton-on-tees, TS18 1UB
    page:1  name                Enter The Asylum
    page:1  contact.website     http://entertheasylum.co.uk
    page:1  contact.phone       0800 090 090

Теперь я ищу через PHP преобразовать его в нечто вроде (вывод print_r):

array(
   "name" => "Enter The Asylum",
   "shop" => array(
      array("location" => "In Shops, Dundas Arcades..."),
      array("location" => "5a High Street, Stockton-on-tees...")
   ),
   "contact" => array(
      "website" => "http://entertheasylum.co.uk",
      "phone" => "0800 090 090"
   )
 )

у кого-нибудь есть идеи?

Ответы [ 2 ]

1 голос
/ 22 декабря 2009

Я не могу помочь вам с первоначальной проблемой, но я предложу правильный способ использования реляционных баз данных, таких как MySQL. То есть ваши таблицы должны иметь такую ​​структуру:

Таблица страниц:

  • id PK
  • имя
  • телефон
  • сайт

Расположение страницы таблицы:

  • id PK (это технически необязательно, но лучше, чем наличие первичного ключа в позиции)
  • page_id FK (ссылка на page.id)
  • положение
  • место

В таком случае данные будут выглядеть примерно так.

Таблица страниц:

| id | name               | phone          | website                       |
| 1  | "Enter The Asylum" | "0800 090 090" | "http://entertheasylum.co.uk" |

Таблица page_position:

| id | page_id | position | location                                          |
| 1  | 1       | 1        | "5a High Street, Stockton-on-tees, TS18 1UB"      |
| 2  | 1       | 2        | "In Shops, Dundas Arcades,Middlesbrough, TS1 1HT" |

И некоторые дополнительные чтения: Реляционная модель

0 голосов
/ 22 декабря 2009

Мне удалось сделать это с помощью регулярных выражений и PHP. Вот волшебная функция (это часть моего кода и прочее):

function fetch_profile_info($id){
    $sql = "SELECT * FROM profile_info WHERE `uid`='".me($id)."'";
    $r = mysql_query($sql);
    $profile = array();
    while($row = mysql_fetch_array($r)){
        /* new: process it into objects etc */
        $field = $row['field'];
        $field = preg_replace('/\.([a-zA-Z]*)/i', "['$1']", $field);
        $field = preg_replace('/^([a-zA-Z]*)/', "['$1']", $field);
        eval("\$profile{$field} = \"".addslashes($row['value'])."\";");
    }
    return $profile;
}

это работает! яй!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...