Foreach循环,我做错了什么?

时间:2016-05-30 20:21:36

标签: php

请参阅以下代码

$template->customer = $rephome->getCustomer($user_id);

foreach($template->customer as $value){
       echo $value->customer_id;
   }

第一行代码将获得查询结果。它被当作对象 第二行代码将回显查询结果中的所有客户ID字段。这很好用。它会响应1234567 ....但是有很多id。

但是,如果我将代码更改为类似下面的代码,则echo只会获得第一个customer_id。即。 1

$template->customer = $rephome->getCustomer($user_id);

foreach($template->customer as $value){
$something = $value->customer_id;
   }

echo $something;

所以问题是将结果列表分配给$ something的正确方法是什么。所以我可以使用$ something作为用于运行其他查询的id列表。

换句话说。我试图使用第一个查询的结果来运行第二个查询。

$template->customers = $rephome->getCustomer($user_id);

foreach ($template->customers as $value){
$template->orders = $rephome->getOrder($value->customer_id);
}

上面的代码给出了与echo相同的结果。我将获得所有客户ID,但我只会获得与第一个客户ID相关的重复订单信息。而不是与不同客户ID相关联的不同订单。

3 个答案:

答案 0 :(得分:1)

是的,当然是因为你在foreach循环的每次迭代中都覆盖$something变量,然后回显结果。

解决此问题的方法是使用数组:

$something = array();
foreach($template->customer as $value){
    $something[] = $value->customer_id;
}

这样,每次迭代都会为数组添加一个值。

  

所以问题是分配列表的正确方法是什么   结果为$ something。所以我可以使用$ something作为id的列表   用来运行其他查询。

要将ID用于另一个SELECT查询,因此它只会返回与数组内ID相关联的记录,例如:

$sql = 'SELECT * FROM `table` 
        WHERE `id` IN (' . implode(',', array_map('intval',  $something)) . ')';

这将导致类似:

$sql = 'SELECT * FROM `table` WHERE `id` IN (1,2,4,6,7,10)';

这会回答你的问题吗?

答案 1 :(得分:0)

关于此代码:

foreach($template->customer as $value){
$something = $value->customer_id;
}

对于新值,$ something会在每个循环上被覆盖。因此,在最后一行,您的代码将输出结果集的$ value-> customer_id的最后一个值。

知道了吗?

所以,使用数组:

$something = array();
foreach($template->customer as $value){
 $something[] = $value->customer_id;
}

答案 2 :(得分:0)

在你的循环中试试这个:

$something[] = $value->customer_id;

然后在你的循环之外:

print_r($something);