【问题标题】:Use function only once inside a foreach loop在 foreach 循环中只使用一次函数
【发布时间】:2012-03-22 11:13:38
【问题描述】:

我有一个 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 变量设置。

有什么聪明的方法可以做到这一点,还是我需要长期这样做?

【问题讨论】:

  • 你现在的做法有问题吗?
  • 取决于您对“漫长的道路”的看法。只需在调用函数后检查并设置一个 bool 变量即可。
  • 嗯,我实际上正在将一个旧脚本重写为面向对象,并且我做了一些时髦的编码来让它工作。那是“漫长的道路”

标签: php mysql function methods foreach


【解决方案1】:

不确定这有多“聪明”,但它的一种方式似乎并不长。

在你的循环之外设置一个变量来表明你还没有清理,并且只有在它还没有设置时才调用 clean。一旦你第一次清理,设置你的标志,这样它就不会再次清理了。

$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 {
        // ...
    }
}

【讨论】:

  • 当然!我实际上做的略有不同。我刚刚在 show_clean() 方法本身内完成清理后将清理标志更改为 false,因为 php 脚本仍在运行
  • 这也行 :) 编程的艺术是解决相同问题的多种方法。
猜你喜欢
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 2013-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多