我在php中有如下代码:
while($r = mysql_fetch_array($q))
{
// Do some stuff
}
其中$ q是检索一组组成员的查询。但是,某些组在memcached中保存了成员,并且memcached值作为$ mem_entry存储在数组中。为此,我通常会执行以下操作
foreach($mem_entry as $k => $r)
{
// Do some stuff
}
这是问题所在。我不希望有两个相同代码块(//做一些东西部分)嵌套在两个不同的循环中,因为在一种情况下我必须使用mysql进行循环而另一个使用memcached。有没有办法用while或foreach切换循环开始?换句话说,如果$ mem_entry具有非空值,则循环的第一行将是foreach($ mem_entry为$ k => $ r),或者如果它为空,则循环的第一行将为while ($ r = mysql_fetch_array($ q))
修改
好吧,在我写完这篇文章后几秒钟,我最终得到了解决方案。图I我将其他任何可能遇到此问题的人留下来。我首先将$ members的值设置为memcached值。如果这是空白的,我运行mysql查询并使用while循环将所有记录传输到名为$ members的数组。然后我使用foreach启动循环($ member和$ k => $ r)。基本上,我每次都使用一个foreach循环,但是$ members的值根据memcached中是否存在值来设置。
答案 0 :(得分:3)
为什么不将doSomeStuff()重构为从每个循环中调用的函数。是的,您需要查看这是否会导致性能下降,但除非这一点很重要,否则这是避免代码重复的简单方法。
如果有办法按照你的建议切换,我不知道。
答案 1 :(得分:0)
不是理想的解决方案,但我会给你2美分。理想的是调用一个函数,但如果你不想这样做,你可以尝试这样的事情:
if(!isset($mem_entry)){
$mem_entry = array();
while($r = mysql_fetch_array($q))
{
$mem_entry[] = $r;
}
}
我的想法是只使用foreach循环来完成实际工作,如果memcache中没有任何内容,那么用mysql中的东西填充你的mem_entry数组,然后将它提供给你的foreach循环。