Bir veritabanında anahtarları bir dizi parçası olarak ayrıştırmak için alınamıyor

2 Cevap php

Ben şimdiye kadar birden fazla nesne şeyler saklamak için büyük olmuştur benim veritabanında bir tablo var. Ama bir çok nesne dizi zımbırtısının dönüştürmeye muktedir istiyorum.

İşte (mysql), bu yeni bir 'nesne' ile ilgili bir veri:

    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

Şimdi ne arıyorum PHP ile (print_r çıkışı) gibi bir şey haline dönüştürmek için:

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

Herkes herhangi bir fikir var mı?

Joe

2 Cevap

Ben regex ve php ile bunu başardınız. İşte sihirli bir işlev (benim kod ve malzeme parçası) olan:

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

bu işe yarıyor! yay!

Ben orijinal sorun size yardımcı olamaz, ama ben MySQL gibi ilişkisel veritabanı kullanımı için uygun bir yol önermek gerekir. Yani tablolar böyle bir yapıya sahip olması gerekir, olduğunu:

Table page:

  • id PK
  • isim
  • telefon
  • web sitesi

Table page_yer:

  • id PK (this is technically not necessary, but nicer than having a primary key on pozisyon)
  • page_id FK (references page.id)
  • pozisyon
  • yer

Veriler daha sonra böyle bir şey olmazdı.

Table page:

| id | isim               | telefon          | web sitesi                       |
| 1  | "Enter The Asylum" | "0800 090 090" | "http://entertheasylum.co.uk" |

Table page_pozisyon:

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

Ve bazı ek okuma: Relational model