2016-05-30 122 views
0

请参阅下面的代码Foreach循环,我做错了什么?

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

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

的第一行代码将得到查询结果。它被提取为对象。
第二行代码将从查询结果中回显出所有客户ID字段。这工作正常。它会回显出1234567 ....不管有多少id。

但是,如果我将代码更改为喜欢下面的代码,回声将只获得第一个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关联的不同订单。

回答

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)'; 

这是回答您的问题吗?

0

在此代码:

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

$的东西将在每个循环的新值overrriten。因此,在最后一行,您的代码将输出resultset的$ value-> customer_id的最后一个值。

明白了吗?

所以,使用数组:

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

您的循环中试试这个:

$something[] = $value->customer_id; 

,然后你的外循环:

print_r($something);