PHP - Как ограничить цикл foreach?
У меня может быть какой-то глупый вопрос.
Вот мой код:
$customers = Mage::getModel('customer/customer')
->getCollection()
->addAttributeToSelect('*')
->addFieldToFilter('group_id', $groupId);
$LimitLoop = 50;
foreach($customers as $customer)
{
$email=$customer->getEmail();
$CustomerPhone = $customer->getPrimaryBillingAddress()->getTelephone();
$CustomerName = $customer->getName();
$CustomerEmail = $customer->getEmail();
if($EnableSMSNotification==1 && $smstext!="") {
$api = new TextMagicAPI(array(
"username" => $TextMagicUsername,
"password" => $TextMagicPassword
));
// Use this number for testing purposes. This is absolutely free.
$phones = array($CustomerPhone);
$results = $api->send($smstext, $phones, true);
$write = Mage::getSingleton('core/resource')->getConnection('core_write');
$sql_insert = "insert into VivasIndustries_SmsHistory values ('','$CustomerName','$CustomerPhone','$CustomerEmail','$smstext',NOW())";
$write->query($sql_insert);
}
}
Это простой foreach loop
, Как я могу ограничить его значением, указанным в $LimitLoop
?
Как я могу получить только ограниченное количество результатов в этом цикле?
Заранее спасибо!
4 ответа
При использовании for
Цикл не может быть и речи, тогда вам нужно было бы вручную добавить увеличивающийся счетчик для выполнения той же логики. Что-то вроде этого:
$LimitLoop = 50;
$i = 0;
foreach ($customers as $customer) {
if ($i++ >= $LimitLoop) {
break;
}
// the rest of the loop
}
Вы можете сохранить переменную $i из других примеров, если вы используете что-то вроде этого
$LimitLoop = 50;
foreach ($customers as $customer) {
/* your code to run */
/* ..... */
/* at the bottom */
$LimitLoop--;
if ($LimitLoop===0) {
break;
}
}
Вы либо хотите использовать break
заявление или использовать for
цикл, который работает до $LimitLoop
,
Для цикла (я использую функцию array_keys как $customers
может быть ассоциированным массивом или отсутствующими числовыми ключами и т. д. Индексирование массива ключей (которое будет иметь числовой порядок) затем гарантирует, что мы всегда получим следующий ключ):
$keys = array_keys($customers);
for ($i = 0; $i < $LimitLoop; $i++) {
$customer = $customers[$keys[$i]];
// the rest of your code
}
Примечание: вам также нужно будет добавить еще немного логики, чтобы убедиться, что у вас есть 50 клиентов с вышеуказанным циклом, иначе он начнет выдавать предупреждения о доступе к недопустимым смещениям в массиве.
перерыв:
$i = 0;
foreach ($customers as $customer) {
// your code
$i++;
if ($i >= $LimitLoop) {
break;
}
}
Это довольно просто:
$customers = Mage::getModel('customer/customer')
->getCollection()
->addAttributeToSelect('*')
->addFieldToFilter('group_id', $groupId);
$LimitLoop = 50;
$counter = 0; //Add a means of counting how many times it's been through the loop
foreach($customers as $customer)
{
$email=$customer->getEmail();
$CustomerPhone = $customer->getPrimaryBillingAddress()->getTelephone();
$CustomerName = $customer->getName();
$CustomerEmail = $customer->getEmail();
if($EnableSMSNotification==1 && $smstext!="") {
$api = new TextMagicAPI(array(
"username" => $TextMagicUsername,
"password" => $TextMagicPassword
));
// Use this number for testing purposes. This is absolutely free.
$phones = array($CustomerPhone);
$results = $api->send($smstext, $phones, true);
$write = Mage::getSingleton('core/resource')->getConnection('core_write');
$sql_insert = "insert into VivasIndustries_SmsHistory values ('','$CustomerName','$CustomerPhone','$CustomerEmail','$smstext',NOW())";
$write->query($sql_insert);
}
$counter++; //Increment the counter
if($counter >= $LimitLoop) break; //Break the loop if we have enough results
}