Используйте функцию только один раз внутри цикла foreach - PullRequest
2 голосов
/ 05 марта 2012

У меня есть поле MySQL DB, заполненное некоторыми данными.В моем скрипте есть опция, которая очищает это поле, так что я могу добавить новые свежие данные, не добавляя к старому.

Однако я использую цикл foreach, который выглядит следующим образом:

            foreach ($model->filenames as $key => $model->filename) {
            $model->get_title($model->filename);
            $model->get_showTitle($model->titles);
            $model->get_number($model->titles);
            $model->get_host($model->urls[$key]);
            $model->source_title($model->titles);
            $model->get_season();
            if ($model->show_exist_batch()) {
                $model->show_clean(); //the method in question
                $model->show_update();
            } else {
                $model->show_add();
                $model->twitter();
            }

Дело в том, что я хочу, чтобы show_clean () запускался только ОДИН РАЗ.Вот как выглядит show_clean ():

    public function show_clean() {
    if ($this->options->clean) {
        $query = "UPDATE jos_k2_items SET extra_fields = '', extra_fields_search = '' WHERE id = " . $this->item->id . "";
        $this->db->prepare($query);
        $this->db->query();
    }
}

$ this-> option-> clean устанавливается переменной post в конструкторе.

Существуют ли какие-либо умные способы сделать это илимне нужно сделать это долгий путь?

1 Ответ

7 голосов
/ 05 марта 2012

Не уверен, насколько это "умно", но это единственный способ, который не кажется длинным.

Установите переменную вне вашего цикла, указывая, что вы не очистили, и вызывайте очистку, только если она еще не установлена. Как только вы очистите первый раз, установите свой флаг, чтобы он не очистился снова.

$cleaned = false;
foreach ($model->filenames as $key => $model->filename) {
    // ...
    if ($model->show_exist_batch()) {
        if (!$cleaned) {
            $model->show_clean();
            $cleaned = true;
        }
        $model->show_update();
    } else {
        // ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...