Обработка многомерных массивов без цикла

#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(...);
}
  

надеюсь, это поможет 🙂