循环时覆盖php循环,然后打破?

时间:2010-08-04 00:26:08

标签: php loops

我想知道这段代码是否合法:

$arr = array(123,456,789,123,456,789);
foreach($arr as $a) {
    $arr = $a;
    break;
}
//prints 123
echo $arr;

它执行,但是我应该知道使用这种方法有任何陷阱吗?

<小时/> 更新:这是实际问题
数据库查询(select * from table where code = $code

中有一个如下数组
Array
(
    [0] => Array
        (
            [id] => 1
            [code] => 1234567
            [member_id] => 7
        )

    [1] => Array
        (
            [id] => 5
            [code] => 1234567
            [member_id] => 
        )

    [2] => Array
        (
            [id] => 67
            [code] => 1234567
            [member_id] => 43
        )

)

所有你关心的是找到第一个(如果有的话)行,它有一个空的member_id(这意味着代码没有被声明)。

那你怎么做呢?

根据Felix Kling的说法,使用变量来保存代码数组然后用你想要的行覆盖它不是最好的解决方案,所以你的建议是什么。

另外,奖励积分:  您可以使用32个字符生成多少个不同的7位数代码(允许重复的字符)?

是32 ^ 32 * 7还是((((((32 ^ 32)^ 32)^ 32)^ 32)^ 32)^ 32)^ 32)?

4 个答案:

答案 0 :(得分:2)

正如其他人所解释的那样,没有理由重复使用该变量。有原因吗?为什么不创建一个新的?

$resultId = 0;

foreach ($result as $row) {
   if ($row["member_id"] == "") {
      $resultId = $row["id"];
      break;
   }
}

但这是一个很大的问题 - 你为什么不简单地在SQL中这样做?您已经在创建SQL查询。 select * from table where code = $code and member_id = null出了什么问题?

顺便说一下,回答你的另一个问题:七个字符的排列数,每个字符有32种不同的可能性= 32 ^ 7.

答案 1 :(得分:1)

所以,

只要您只使用数组的副本,使用此方法就可以正常工作。

如果您通过引用foreach($code_info as &$code)传入数组,那么您将收到为foreach()错误提供的无效参数。

答案 2 :(得分:0)

这可能有用,但它肯定是错误的编码风格,使您的代码更难理解。因为如果你使用更有意义的变量名,那就没有意义了:

$scores = array(123,456,789,123,456,789);
foreach($scores as $score) {
    $scores = $score;
    break;
}
//prints 123
echo $scores;

在这种情况下,$scores建议保留类似列表的内容,而不是单个元素(或者假设您使用$score_list ......更糟糕的是)。如果你开始给出适合不同类型值的变量名称,它就不会改进;)


请记住:并非所有可能的事情都应该完成。我绝对会避免这种情况。

答案 3 :(得分:0)

$empty_number=-1;
foreach($arr as $a=>$b)
{
  if($b['member_id']!='')
  {
    $empty_number=$a;
    break;
  }
}

空号的索引存储在$ empty_number变量中..如果没有空的member_id标记的行,则$ empty_number的值为-1。

修改

对于您的红利问题,最大值为32 ^ 7 = 34 359 738 368