【问题标题】:Increase php array_slice or skip element?增加 php array_slice 或跳过元素?
【发布时间】:2013-08-11 17:41:32
【问题描述】:

这是我的问题,我有一个包含 42,000 条 SKU 记录的 CSV 文件,除了前几条和最后大约 3000 条需要处理,其余记录并不重要,需要跳过。我正在使用 array_slice 一次处理 15 条记录,但是如果不以 15 条为一组处理它们,我想不出一种跳过文件中间大约 39,000 条记录的好方法。我知道我所有的 SKU不想处理包含文本 CNV 所以我尝试使用这个 if 语句跳过它们并将限制增加 100 以尝试快速通过所有不重要的 SKU。

        foreach($import_data as $row_id => $row) {
    if(preg_match('/CNV/',$new_post_meta['_sku'])) {
        $limit = ($limit +100); 
        continue;
    } else {
        $limit = 15; //Set limit back to 15
        //Process each SKU here

这样做的问题是,当它最终通过 39,000 个不重要的 SKU 时,限制设置为大约 1500,因此它会跳过需要处理的前 1500 个 SKU,因为新的偏移量设置为 ($limit + $偏移量)。有没有人有任何建议可以有效地通过 39,000 个 SKU 而无需小块处理?

limit 用于设置每个array_slice 的长度,如下所示:

$import_data = array_slice($import_data, $offset , ($limit > 0 ? $limit : null), true);

【问题讨论】:

  • 你能贴出if之后的内容吗?使用该限制的位置。我不明白为什么它很重要。
  • 是的,我刚刚更新了我最初的问题,限制用于指定切片的长度。

标签: php arrays parsing csv slice


【解决方案1】:

这听起来可能很傻,但您可以先过滤数组,然后只对重要的东西做任何您需要做的事情。

$import_data = array_filter($import_data, function($value){
    return !preg_match('/CNV/',$value['_sku']); // value here is an item of your array
});

foreach($import_data as $row_id => $row) {
    // process just the $import_data that matters
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 2011-10-12
    • 1970-01-01
    • 2021-05-26
    • 2022-01-06
    • 2014-07-09
    • 1970-01-01
    相关资源
    最近更新 更多