2012-08-14 76 views
2

所以这个bug对我来说似乎很奇怪。我有一个包含两个必需参数的方法,但是当脚本进入第一个for循环时,两个参数中的一个似乎不再存在。真的很奇怪的bug for循环PHP

下面的代码的大块:

public function getOptionsForParameters($params, $product){ 
    // here the value of $product is 105 
    for($i = 0; $i<count($params); $i++){ 
     // but here, $product no longer exists, so in the SQL query, it is empty 

     $sql = "SELECT * 
       FROM [table_name] 
       WHERE prm_id = ".(int)$params[$i]['prm_id']." 
        AND prd_id = ".(int)$product." 
        AND opt_status = 'active'"; 
    } 
// ... 
} 

我真的不明白为什么,因为有方法的开始,for循环之间绝对没有脚本。另外,如果我在所有for循环之后打印变量,就在方法的“返回”之前,它的值是105 ...在我看来,PHP以某种方式为我的变量提供了一个范围,这是奇怪..

我一直在挣扎已经与此太久,我还没有发现在谷歌或PHP.net

与此相关的任何

是否有人有任何想法,为什么我的剧本要这么做?

BTW:我的PHP版本是5.3.10

非常感谢您

+8

不可能用您发布的代码。请发布一个完整的代码片段,演示此行为,最好是像http://codepad.org一样。 – deceze 2012-08-14 13:40:35

+0

这些注释在循环内部发生了什么?你是否在擦拭可变内容?它不存在或是空的吗?它们是有区别的。 – Orbling 2012-08-14 13:41:15

+0

缺少哪个变量,$ product或$ param,如果它是$ param,它只是“内部”$ param或整个变量的内容... – 2012-08-14 13:43:25

回答

0

按照正常的数组声明,你有没有尝试过:

WHERE prm_id = ".(int)$params['prm_id'][$i]." 

,因为它似乎是正常的方式到declare an array至少根据我提出的有关数组声明语法的问题?

+0

我相信这应该解决OP问题。您目前在错误的位置有索引,这会让事情变得有点流畅。 – Jeremy1026 2012-08-14 13:42:01

+5

不一定。这个阵列的结构是完全有效的。除此之外,它是'$ product',OP抱怨“缺少”,而不是'$ params'。 – DaveRandom 2012-08-14 13:45:04

+0

@Jeremy1026它取决于数组的声明方式 - 尽管大多数人似乎以我所发布的代码描述的方式声明了一个数组。 OP *可能已经以'[column] [row]'方式创建了它,或者有一个这样做的函数。我只是提供一个建议。 – Fluffeh 2012-08-14 13:45:04

1

它不应该发生。你100%肯定它已经不在了吗?什么是isset($ product)给你?

以下代码是做什么的?

public function getOptionsForParameters($params, $product){ 
    var_dump($product); 
    for($i=0; $i<4; $i++){ 
     var_dump(isset($product)); 
    } 
} 

如果仍然导致了外部函数,并在内环未设置$产品一套$产品,那么什么是PHP本身非常错误的,它可能是一些bug ......

在另一方面:

$i<count($params); 

在for循环语句是低效的,因为它执行数($ params)方法迭代。更好地计算一次并使用该计算值

$count = count($params); 
$i<$count 
+0

isset($ product)在for循环中返回false – 2012-08-14 13:44:40

+0

如果你*只是*有for循环isset($ product)并且没有任何其他命令(如构建SQL)? – 2012-08-14 13:47:35

+0

同样的事情发生在 – 2012-08-14 13:54:00