我正在遍历Shopify的产品的JSON多维数组。每个产品都有3个选项,每个选项可以有无数个值。
例如:
在循环中,我正在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();
}
答案 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 }}。
并且由于该选项的保存逻辑在值循环之下, 它将在保存任何内容之前检查缓存,这可能不是复制/粘贴的答案,我只是给您一些逻辑来配合使用