按值展开或 str_split

Explode or str_split by values

我有多个这样输入的成分。

3x 胡萝卜 1/2 杯牛奶(或可能是 1/2 杯牛奶) 1 茶匙橄榄油

我还有一个成分列表和计量单位,所以我可以检查它们是否在字符串中。

现在我不知道如何根据我的成分或单位列表中的值拆分字符串

我能想到的就是首先检查单词 of 是否在数组中,就像这样

$listIngredients = // a massive list pulled from the database like below 
$units           = ['x', 'cup', 'tsp'];
$results         = [];
foreach($result->recipe_ingredients as $ingredient)
{
  $results = strtr($ingredient, 'of ', '');
  $results = explode($ingredient); 
  // using str_plural() I want to check if ingredient or units of measurement exist. then
  // split them if they do so I have an array having the number, then unit, then ingredient
  // then I will save each in the database under different columns. 
}

或者有更好的方法吗?可能会检查何时有 space 或 int 停止,例如。 3 个胡萝卜或 1/2 杯。我很困惑 >_<

编辑:我想 id 把它扔在那里,我知道爆炸需要 2 个参数。我的问题更多是关于什么参数,如果我需要超过 2 个,例如我想检查字符串中的整数、单位和成分。

我不太清楚你的意思

I thought id throw this out there, I know explode requires 2 parameters. my question is more in regards to what parameters, if I need more than 2, e.g. I want to check the string for a int, unit and also a ingredient.

但我的猜测是,您应该检查: Exploding by Array of Delimiters

您还可以使用这个简单的旧解决方案检查字符串是否包含字符串的一部分(strtolower() 不区分大小写)

if (strpos(strtolower($haystack), strtolower($needle)) !== false) {
    echo 'true';
}

我会尝试用您的关键词列表分解字符串,然后再次分解数组元素,直到没有可用的关键词为止。此外,您应该将已用于左侧元素的分隔符附加到左侧,这样您就不会丢失您的成分(使用某种空白字符可以防止重复拆分)。