PHP Разделение длинной строки в списке - PullRequest
0 голосов
/ 20 сентября 2011

Я пытаюсь сохранить набор функций в базе данных. Формат, о котором я думал, был вставить его так:

Материал здесь | Разделенный этим | Больше материала | И еще немного

Теперь мне нужно взять это из базы данных и сделать из него список вроде:

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

Это будет легко сделать? Я знаю, что могу сделать:

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

но тогда это не сработает для самого первого и последнего элемента, плюс закрывающие теги. Есть ли другой способ, которым я должен был бы вставить свой список в базу данных? Или это нормально, и мне просто нужен правильный код для лучшего форматирования неупорядоченного списка?

Ответы [ 5 ]

5 голосов
/ 20 сентября 2011

Я не думаю, что есть какой-то однострочный фрагмент кода, который вы можете использовать для этого (хотелось бы, чтобы его исправили), так что да, сохраните ваши данные в том виде, в котором вы находитесь в данный момент в базе данных, и напишите небольшую вспомогательную функцию для разделите строку и создайте список HTML.

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

  return $output;
}
2 голосов
/ 20 сентября 2011

Я использую VIN-декодер, и как только он декодирует VIN, он дает мне огромный список функций для различных категорий, таких как экстерьер, интерьер, Безопасность, Механическая. Он генерирует это для меня, но пользователи будут иметь Возможность удалять и редактировать их. Это может стать очень грязным, если я сделаю он вставляет в свою таблицу, если он не существует, а затем пытается сопоставьте его с транспортным средством.

Это ситуация, когда реляционная база данных работает очень хорошо. Вы можете создать несколько таблиц для этого.

  • У вас есть one to many отношение между VIN и функциями.

Это предполагает, что у вас будет таблица, в которой хранятся различные возможные функции.

table features (
    featureID,
    category,
    feature
)

После этого вы можете получить таблицу, которая связывает номер VIN с функциями:

table vin_features (
    VIN,
    featureID
)

У вас может быть также таблица с информацией, специфичной для каждого VIN (может быть, марка, модель, год?) И, возможно, таблица параметров пользователя.

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

2 голосов
/ 20 сентября 2011

Использование подхода «разделенный чем-то» почти всегда является плохим способом сделать это. Нормализуйте свою базу данных, чтобы у вас была строка для каждой функции, что-то вроде

table features(
  id PK,
  Name
)

и все становится намного проще запрашивать / поддерживать ...

2 голосов
/ 20 сентября 2011

Если вы хотите сохранить упрощенный подход к хранилищу, вы можете вводить открывающие и закрывающие теги одновременно:

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

Вам также следует проверить, существует ли хотя бы одна запись $data.

1 голос
/ 20 сентября 2011

используйте explode () , чтобы разбить вашу строку в массиве. Затем вы можете использовать цикл foreach для генерации списка.

...