我正在使用Stripe处理客户付款并维护订阅(旁注,这太棒了)。我需要在我的网页上列出客户的订阅,我需要假设他们最多可以订阅300个订阅(基本上无限制)。我在PHP中创建了一些代码,用于成功查询Stripe以获取客户的订阅,但只有最后一个(在本例中是测试帐户中的第五个)订阅是通过JSON发送的。
这是我的PHP代码:
$custsubs = \Stripe\Customer::retrieve($customerID)->subscriptions->all(array(
'limit'=>300));
$i = 1;
foreach ($custsubs['data'] as $row){
$rows= '<tr></td><td>'.$row['plan']['id'].'</td><td>'.$row['metadata']['Cust_Info'].'</td><td>$'.(($row['plan']['amount'])/100).'</td><td>'.$row['plan']['interval'].'ly</td><td>
<div style="text-align:right" id="setdefaultplan'.$i.'" name="setdefaultplan'.$i.'"> <button class="button btn-blue" type="button" id="defplan'.$i.'" ><i class="fa fa-level-down"></i> Change </button></div></td><td>
<div style="text-align:right" name="remplan'.$i.'" id="remplan'.$i.'"> <button class="button btn-red" type="button" id="removeplan'.$i.'" ><i class="fa fa-fw fa-ban"></i> Cancel Plan </button></div></td></tr>';
$i++;
}
$results = array('error' => false,
'rows' => $rows
);
echo json_encode($results);
die();
JSON结果如下:
{"error":false,"rows":"<tr><\/td><td>Monthly DIY Web Portal Access<\/td><td>Test Info<\/td><td>$6.95<\/td><td>monthly<\/td><td>\r\n\t\t\t\t<div style=\"text-align:right\" id=\"setdefaultplan5\" name=\"setdefaultplan5\"> <button class=\"button btn-blue\" type=\"button\" id=\"defplan5\" ><i class=\"fa fa-level-down\"><\/i> Change <\/button><\/div><\/td><td>\r\n\t\t\t\t<div style=\"text-align:right\" name=\"remplan5\" id=\"remplan5\"> <button class=\"button btn-red\" type=\"button\" id=\"removeplan5\" ><i class=\"fa fa-fw fa-ban\"><\/i> Cancel Plan <\/button><\/div><\/td><\/tr>"}
我将res.rows传递给JQuery以使其在HTML表格中整齐地呈现,但我不明白为什么我只在foreach循环中获得第5个实例。我怎么做到这一点,我把他们全部送去了res.rows?
谢谢!
答案 0 :(得分:3)
在循环完成 AFTER 之前,您永远不会将$rows
存储到数组中,因此您只能存储生成的最后一行。
你想:
foreach(...) {
$rows[] = ....;
^^---array append
}
相反,所以你要构建一个行数组。