请参阅以下代码
$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相关联的不同订单。
答案 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);