2011-09-20 5 views
0

데이터베이스에 많은 기능을 저장하려고합니다. 나는 데이터베이스에서와 것은으로 만들 것을 잡아해야합니다, 그리고 이제 좀 더PHP 긴 문자열을 목록으로 구분하기

| 더 많은 물건 | 즉,로 구분 | 여기

물건을 : 내가 생각 형식은 다음과 같이 삽입했다 같은 목록 :

<ul> 
    <li>Stuff Here</li> 
    <li>Separated By That</li> 
    <li>More Stuff</li> 
    <li>And some more</li> 
</ul> 

그런 짓을 쉽게 수 있습니까?

str_replace("|", "<li>", $data); 

을하지만 그것은 매우 첫 번째 항목과 마지막 항목, 플러스 닫는 태그를 작동하지 않을 것입니다 : 나는 내가 할 수있는 것을 알고있다. 내 목록을 데이터베이스에 삽입해야하는 방법이 있습니까? 또는이 방법은 괜찮습니까? 그리고 정렬되지 않은 목록을 더 잘 포맷하려면 올바른 코드가 필요합니다.

+0

일반적으로 데이터를 해당 형식으로 저장하는 것은 좋지 않습니다. 각 항목에 데이터베이스에 자체 행이 있어야합니다. 이 아이디어에 대한 자세한 정보는 "정규화"를 참조하십시오. – mfonda

답변

5

수정할 수있는 한 줄짜리 코드가 있다고 생각하지 않습니다. 수정하고 싶습니다. 그렇습니다. 현재 데이터베이스에있는 데이터를 저장하고 작은 보조 기능을 작성합니다. 문자열을 분리하고 HTML 목록을 작성합니다.

function build_list($string) { 
    $output = '<ul>'; 
    $items = explode('|', $string); 
    foreach ($items as $item) { 
    $output .= '<li>' . $item . '</li>'; 
    } 
    $output .= '</ul>'; 

    return $output; 
} 
+0

저는 Clive에 동의합니다. 단 한 줄의 코드가있을 것이라고는 생각하지 않습니다. 간단히 말하면 첫 번째 항목과 마지막 항목을 포함해야하기 때문입니다. 클라이브는 IMO에 대한 올바른 생각을 가지고 있습니다. 작은 도우미 기능이 이상적입니다. – Hanny

+2

이것이 제 의견으로는 최선의 방법입니다. 현재 선택한 항목의 li 태그에 특성을 추가하려는 경우 (탐색 또는 유사한 경우) '영리한'str_replace 솔루션은 더 이상 유용하지 않습니다. –

+0

완벽! 감사. 맨 끝에 빈 총알이 생기는 것을 제외하고는. – Drew

1

explode()을 사용하면 문자열을 배열로 분할 할 수 있습니다. 그런 다음 foreach 루프를 사용하여 목록을 생성 할 수 있습니다. 당신은 단순한 스토리지 접근 방식을 유지하려면

2

, 당신은 같은 시간에 여는 태그와 닫는 태그를 삽입 할 수하십시오 적어도 하나의 $data 항목이있는 경우

str_replace("|", "</li><li>", "<li>$data</li>"); 

또한 다음 테스트해야합니다.

2

"분리 된 방식으로"접근법을 사용하는 것은 거의 항상 나쁜 방식입니다. 당신이

table features(
    id PK, 
    Name 
) 

같은 기능에 따라 행, 뭔가를하고 모든 것을 유지/쿼리 훨씬 쉽게되도록 나는 VIN 디코더를 사용하고

2

... 당신, 데이타베이스를 정상화하고 그것은 VIN을 디코딩하면 그것은 내게 거대한 외장, 인테리어, 안전, 기계와 같은 다른 카테고리에 대한 기능 목록을 제공합니다. 나를 위해 생성되지만 사용자는 삭제하고 편집 할 수있는 옵션이 있습니다. 내가 존재하지 않으면 을 자신의 테이블에 삽입 한 다음 을 차량과 일치 시키면 매우 지저분해질 수 있습니다.

이것은 관계형 데이터베이스가 잘 작동하는 상황입니다. 이를 처리 할 여러 테이블을 생성해야합니다.

  • VIN과 기능 사이에는 one to many의 관계가 있습니다.

다른 가능한 기능을 저장하는 테이블이 있음을 알 수 있습니다.

table features (
    featureID, 
    category, 
    feature 
) 
그런 다음 VIN 기능과 번호 연결하는 테이블을 가질 수

: 아마도

table vin_features (
    VIN, 
    featureID 
) 

당신은 또한 각 VIN에 대한 특정 정보 (아마도, 모델, 년?)있는 테이블을 가질 수 있으며,을 사용자 옵션 용 테이블

이렇게하면 데이터 관리 및 쿼리가 장기간에 훨씬 쉬워집니다. 특히 더 복잡한 질문에 대답해야 할 필요가있는 경우 특히 그렇습니다.

+0

그래서 새로운 VIN이 삽입되면, 그것이 존재하지 않으면 features 테이블에 자동으로 삽입됩니다. 그런 다음 차량용 기본 기능을 차량용 디코더에서 vin_features 테이블에 삽입하십시오. 그렇다면 그들 중 하나가 사용자 정의 업데이트, 나는 그것을 기능 테이블에 추가해야할까요? – Drew

+0

아무도 다른 사람이 입력하지 않는 가짜 기능을 입력하면 기능 테이블에 저장해야합니까? – Drew

관련 문제