2009-12-22 2 views
-1

데이터베이스에 하나 이상의 개체에 물건을 저장하는 데 유용한 테이블이 있습니다. 하지만 난 그것을 다중 객체 배열로 변형시킬 수 있기를 원한다. 이제배열의 일부로 구문 분석 할 데이터베이스의 키를 가져올 수 없습니다.

 
    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 

내가 무엇을 찾고 있어요 것은 같은 (print_r의 출력)로 변환 PHP를 통해하는 것입니다 : 여기

는 (MySQL의에서)이 새로운 '객체'와 관련된 데이터는 다음과 같습니다

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

아무도 아이디어가 없습니까?

+3

관계형 데이터베이스를 사용하지 않는 좋은 예입니다. :) –

+0

내 현재 설정에서 사용할 수있는 모든 것 ...이 작업을 수행하는 방법에 대한 아이디어가 없습니다 ... –

+0

과거에는 "위대한"것이 었습니다. 너는 거의 모든 정상적인 형태를 깬다.즉, PHP에서 변수 변수를 사용하여 문제를 해결할 수 있습니다. 나는 긍정적이지 않다. – MindStalker

답변

0

나는 정규식과 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; 
} 

작동합니다! 예!

+1

"eval()이 답이라면 틀린 질문을하는 것이 거의 확실하다." - Rasmus Lerdorf, PHP의 BDFL – Dereleased

+0

잘 작동하기 때문에 다른 방법이 없기 때문에이 코드가 필요합니다 ... 어쨌든 거기에 eval()이 있습니까? –

1

원본 문제는 해결할 수 없지만 MySQL과 같은 관계형 데이터베이스를 사용하는 적절한 방법을 제안합니다. 즉, 테이블이 같은 구조를 가지고 있어야한다 :

표 페이지 :

  • ID PK
  • 이름
  • 전화
  • 웹 사이트

표 page_location :

  • ID PK(이 기술적으로 필요하지 않지만 위치에 기본 키 갖는보다 더 좋은)
  • FK(참조 page.id)
  • 위치
  • 을 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" | 

그리고 몇 가지 추가 읽기 : Relational model

+0

코드를 통해 동적으로 새 파트를 추가 할 수 있기를 원하므로 좋지 않다. (훨씬 더 많을 것이다. 데이터베이스, 각기 다른 항목 등) –

+0

@jos Simpson : 당신은 이런 종류의 설정이 얼마나 놀랍습니까? CMS의 일종 (사용자가 새로운 정보를 정의하는 기능이 광대 한 곳)을 구축하지 않는 한, 이것은 아마도 갈 길이 멀다. 특히 DB 정보를 사용할 수있는 형식으로 쉽게 변환 할 수 있기를 기대하는 경우. – Guvante

+0

나는이 객체들을 위해서 1000 개의 테이블을 원하지 않는다 ... 나는 아름다운 정규 표현식으로 그것을 알아 냈다. :) –

관련 문제