我正在循环使用CSV来获取产品数据。有些行是产品的变体,并且有自己的行,例如:
sku, base_sku, name, desc, attribute
, 123, "product name", "long description here", Colour
abc,123,,,Red
xyz,123,,,Blue
novar,novar,"No variant product", "description here",
主要产品有base_sku
。所有变体都将具有特定的sku,并通过base_sku
链接到产品。如果产品没有变体,那么产品的sku和base_sku具有相同的值。
无论如何,我正在使用以下方式循环CSV:
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
然后我正在检查变体并在循环中执行另一个变换以获取所有变体:
while (($varient = fgetcsv($handle, 1000, ",")) !== FALSE){
在此while
循环期间,我正在检查sku
和base_sku
是否相同,以及它们是否突破while
循环。现在我想将文件指针倒回一行,这样当第一个while
循环时它将读取正确的行。
目前我尝试过:
fseek($handle,-1,SEEK_CUR);
我当时误解的是,每个字符都返回文件指针,而不是每行。
如何让文件指针返回一行?
答案 0 :(得分:0)
似乎没有办法做到这一点,所以我已经转换了一些代码来处理数组:
$rows = array();
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$rows[] = $data;
}
foreach ($rows as $data) {
答案 1 :(得分:0)
你可以使用函数ftell()保存以前的位置 http://php.net/manual/en/function.ftell.php 然后你可以回到那个位置 使用函数fseek()
所以你的代码看起来像这样
$prev_line=null;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$prev_line=ftell($handle);
while (($varient = fgetcsv($handle, 1000, ",")) !== FALSE){
if($varient['sku']==$varient['base_sku']){
fseek($handle, $prev_line, SEEK_SET);
break;
}
}
}
所以你的指针将在它进入第二个while循环
之前的位置