PHP在循环检查之前检查值

时间:2018-12-03 18:53:36

标签: php

我正在遍历Shopify的产品的JSON多维数组。每个产品都有3个选项,每个选项可以有无数个值。

例如:

  • 灯(产品)
    • 玻璃表面(可选)
      • 清除(值)
      • 烟(值)
    • 金属表面处理(可选)
      • 抛光的Chrome(价值)
    • 拖放(选项)
      • 600mm(值)
      • 800mm(值)

在循环中,我正在CMS的“中继器”字段中创建行(每个选项一个,然后每个值的每个选项中一个中继器)。

这很好,但是我想做一些检查,因为产品数组每30分钟被缓存一次,因此,如果缓存已更新,并且删除了一个选项或对该选项添加了一个值,则应该更新

我先检查一下(在做任何事情之前,先遍历已添加的所有现有转发器选项,如果某个选项已经存在,请跳过它(这样就不会创建多个相同的选项)。

我需要做的是检查每个值以查看是否添加了任何新值。我可以编写代码以实际将值添加到Repeater字段中,但是到现在为止我不确定如何检查该选项(如果该选项已经存在)会跳过。

有什么想法吗?

foreach($product['options'] as $option) {

    foreach($p->shop_product_options as $options) {

         // If this option already exists... then skip the parent loop on this product
        if ($options->global_text == $option['name']) {
            continue 2;
        }

    }

    $options = $p->shop_product_options->getNew();
    $options->of(false);
    $options->global_text = $option['name'];
    $options->save();
    $p->shop_product_options->add($options);
    foreach($option['values'] as $o) {
        $values = $options->shop_product_options_option->getNew();
        $values->of(false);
        $values->global_text = $o;
        $values->save();
        $options->save();
        $options->shop_product_options_option->add($values);
    }
    $options->save();
}

1 个答案:

答案 0 :(得分:0)

仍然不确定我是否完全了解您的需求,但听起来您需要这样的东西:

foreach($product['options'] as $option) {

    $optionNames = array_column($options, 'name');
    $options = $p->shop_product_options->getNew();

    foreach($option['values'] as $o) {

        $values = $options->shop_product_options_option->getNew();

        if($values->global_text === $o && in_array($option->global_text, $optionNames, true)) {
            continue 2;
        }
        $values->of(false);
        $values->global_text = $o;
        $values->save();
        $options->shop_product_options_option->add($values);
    }

    $options->of(false);
    $options->global_text = $option['name'];
    $p->shop_product_options->add($options);
    $options->save();
}

array_column将创建一个数组,当键为name时获取多维数组的所有值,然后if语句将查找name和{{1 }}。

并且由于该选项的保存逻辑在值循环之下, 它将在保存任何内容之前检查缓存,这可能不是复制/粘贴的答案,我只是给您一些逻辑来配合使用