【发布时间】:2017-05-31 21:02:38
【问题描述】:
我正在尝试将新字符串与数据库中的旧字符串进行比较,如果该字符串存在,则将其加一,例如,如果字符串 car 存在,则新字符串应为 car-1 如果该字符串存在则 car-2...
我正在使用 Laravel,并通过使用 while() 循环实现了这一点,但我也想使用 for() 循环来做到这一点。 p>
这是我的有效代码:
foreach($lang_codes as $key => $value)
{
$oldAlias = str_slug($request->{"new_category_lang_{$value->code}"}, '-');
$newAlias = $oldAlias;
$aliasCheck = ShopCategoryName::where('alias', $oldAlias)->first();
$newCategory = new ShopCategoryName;
$i = 1;
while ($aliasCheck)
{
$newAlias = $oldAlias . '-' . $i;
$aliasCheck = ShopCategoryName::where('alias', $newAlias)->first();
$i++;
}
}
我试图将 strcmp() 与 for() 循环一起使用,但我不知道如何将这些代码放在一起,太乱了。 p>
所以基本上,我正在尝试使用上面的代码来处理 for() 循环,但是我的大脑已经阻塞并且过于复杂了。
【问题讨论】:
-
我看不出循环的改变会做什么。此外,该代码似乎正在解决一些问题,但您正在询问将一个循环换成另一个循环 - 这对代码样式或可读性没有影响。不同之处在于删除该代码并让您的数据库完成所有工作。我们有触发器、我们有存储过程、我们有事件 - 所有这些都是强大的工具,您可以使用它们让您的数据库包含您想要的数据。这些方法中的任何一个都不会以让您简单地删除这段代码的方式解决您的问题吗?
-
因为我想学习如何使用 for 循环,仅此而已。以不同的方式编写代码!
-
作为@N.B.解释说,您的 while 循环实际上非常适合这种情况。为什么?因为您的循环基于 true 或 false(当 $aliasCheck 存在时,请执行此操作)。尝试在 for 循环中编写此代码将导致编写更多代码。当你有一个已知的终点时,for 循环会更好,例如:在数据库中插入 10 个项目最适合使用 for 循环 (
for($i = 1; $i <= 10; $i++) { })。 -
用while循环没问题,这种情况下不用for循环。