增加php array_slice或跳过元素?

时间:2013-08-09 17:47:03

标签: php arrays parsing csv slice

这是我的问题,我有一个包含42,000个SKU记录的CSV文件,只有前几个记录和最后一个大约需要处理3000个记录,其余的记录并不重要,需要跳过。我正在使用array_slice一次处理15条记录,但我无法想出一个好方法可以跳过文件中间大约39,000条记录,而不用15块来处理它们。我知道所有的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而不用小块处理它们?

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

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

1 个答案:

答案 0 :(得分: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
}