Как бы вы проанализировали эту линию ингредиентов? - PullRequest
1 голос
/ 23 апреля 2011

У меня есть текстовая область, полная строк ингредиента; обычно в формате [количество] [измерение] [ингредиент] [дополнительный]. Например, несколько строк ингредиентов могут быть:

1 столовая ложка чеснока, фарш
1 стакан сладкого перца, нарезанный

Я хочу иметь возможность идентифицировать каждое измерение и ингредиент - как бы вы это обработали? Моя мысль была ...

// loop thru line by line of textarea

// explode each line by the space thus line[0] would be 1, line[1] tablespoon, line[2] garlic... etc

Теперь вот моя проблема, и я не уверен, что эффективно делать. Запускаю ли я каждую строку [X] через поиск в БД для этого измерения, ингредиента и т. Д.? Но так как "болгарский перец" разделен пробелом, я не получу совпадения.

// does line[1] appear in the measurements table?
// does line[2] appear in the ingredients table?

У кого-нибудь еще есть креативные решения?

Ответы [ 2 ]

0 голосов
/ 23 апреля 2011

Попробуйте stripos() найти подстроку вместо explode().

$mytext = "1 tablespoon garlic, minced 1 cup bell pepper, chopped"; # or any text
$keyword = "bell pepper"; # or any search term

if (stripos($mytext, $keyword) === false) {
  # not found
  ...
  }
else {
  # found
  ...
  }

Ссылки

  • stripos () - поиск без учета регистра
  • strpos () - поиск с учетом регистра

Вы можете использовать explode() (не рекомендуется), но также вам следует отделить слова в поисковом запросе и искать вхождение первого ключевого слова в массиве, когда следующее ключевое слово следует в следующем элементе массива, и т. Д. Это ненужное усложнение.

0 голосов
/ 23 апреля 2011

Разделите ваши данные не пробелом, а другим разделителем.Например, вы можете сделать:

$strRecipe = "1 | tablespoon | bell pepper |  minced";

И затем вы можете использовать:

$recipe = explode("|",$strRecipe);

Теперь вы можете получить доступ к каждому полю с помощью: $ recipe [0], $ recipe [1] ETCETC

...