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

}
Другие вопросы по тегам