#php #codeigniter-2
#php #codeigniter-2
Вопрос:
Мне нужен ваш совет и помощь
я извлек массив данных из базы данных и хочу обрабатывать каждый элемент один за другим без использования цикла foreach, что-то вроде
извлеките элемент a и обработайте его, когда закончите, извлеките элемент b и обработайте его, когда закончите, извлеките элемент b и обработайте его
пока массив не станет пустым, скрипт может завершать работу
в настоящее время я перебираю данные, используя цикл foreach, но ничего не получается найти.
$loaded_message = $this->lib->load_queued_messages();
if(count($loaded_message) == 0) {
die ('Nothing to do');
}
foreach($loaded_message as $tosend)
{
if($this->lib->send_sms($tosend['from'], $tosend['msg'], explode(',', $tosend['numbers']), $tosend['owner'], $tosend['qid']))
{
// Remove the message from queue
$this->lib->remove_msg_from_queued_message($tosend['qid']);
$this->lib->log('message #' . $tosend['qid']. ' sent and removed from queue', $tosend['owner']);
}else{
$this->lib->log('SENDING_ERROR: message #' . $tosend['qid']. ' not sent and remain in the queue for#', $tosend['owner']);
}
}
Внутри таблицы журнала я обнаружил, что запись была сделана для неправильного идентификатора сообщения, и кажется, что сообщение было отправлено на неправильный номер, но это не так.
Комментарии:
1. опубликуйте то, что у вас не работает, чтобы кто-нибудь мог рассказать вам, как это исправить.
2. Простите за вопрос, почему вы избегаете цикла?
3. Сообщение обновлено примером кода. спасибо @Damien и @Mat за ваш быстрый ответ
4. Даже с элементом pop вам нужен цикл, цикл while. Псевдокод: в то время как(! array_empty()) $tmpElem = pop_element;
5. Вы могли бы рассмотреть возможность использования стека SPL — uk.php.net/manual/en/class.splstack.php — но вам все равно придется выполнять цикл, пока он не станет пустым
Ответ №1:
привет, приятель, ты можешь использовать что-то вроде
while(sizeof($yourarray)) {
$result = array_pop(yourarray);
...yourprocessing_here(...);
}
надеюсь, это поможет 🙂