我有一个csv文件,我需要删除它的部分,并且它的长度为7017行,所以我使用php删除某些部分并将其重新组合在一起,相关的代码如下所示。
$rows;
$count = 0;
while (($row = fgetcsv($files, 56000)) !== false) {
$rows[$count] = $row;
if (stristr($rows[$count][8], "Features:")) {
$rows[$count][8] = str_replace("Features:", "features", $rows[$count][8]);
$rows[$count][8] = str_replace(":", "", $rows[$count][8]);
$rows[$count][8] = explode("features", $rows[$count][8]);
if (isset($rows[$count][8][1])) {
$rows[$count][8][1] = str_replace("Compatible", "compatible", $rows[$count][8][1]);
$rows[$count][8][1] = explode("compatible", $rows[$count][8][1]);
//$rows[$count][8][1] = explode("Compatible", $rows[$count][8][1]); produces error if used
$rows[$count][8][1] = explode("-", $rows[$count][8][1][0]);
} else if (isset($rows[$count][8][0])) {
$rows[$count][8][0] = str_replace("Compatible", "compatible", $rows[$count][8][0]);
$rows[$count][8][0] = explode("compatible", $rows[$count][8][0]);
//$rows[$count][8][0] = explode("Compatible", $rows[$count][8][0]); produces error if used
$rows[$count][8][0] = explode("-", $rows[$count][8][0][0]);
} else {
$rows[$count][8] = str_replace("Compatible", "compatible", $rows[$count][8]);
$rows[$count][8] = explode("compatible", $rows[$count][8]);
//$rows[$count][8] = explode("Compatible", $rows[$count][8]); produces error if used
$rows[$count][8] = explode("-", $rows[$count][8][0]);
}
$countif = 1;
while (isset($rows[$count][8][1][0][$countif])) {
$countif++;
}
$max = $countif - 2;
$countif = 9;
$counter = 1;
while ($max <= 5 && $max >= 1 && $countif <= 13) {
$rows[$count][$countif] = $rows[$count][8][1][0][$counter];
$countif++;
$counter++;
}
$rows[$count][8][0] = explode("Compatible", $rows[$count][8][0]);
//$rows[$count][8] = $rows[$count][8][0][0];
}
$count++;
}
print_r($rows[14][8]);
问题在于,即使'exploble'在爆炸声明中引用的字符串中,它仍然是一个单独的字符串,可以说是未爆炸的。输出如下。
100%全新采用优质材料制成,确保产品质量 防止划痕在屏幕上碰到油脂和指纹你可以 现在可以轻松地使用手写笔设计的移动或文字人 与移动触摸屏一起使用兼容:诺基亚:5530 Xpress MusicPackage内容:1 x Stylus for Nokia 5530 Xpress Music - 白
非常感谢任何帮助。
编辑: var_dump($rows[14]);
0 => string '41807' (length=5)
1 => string '' (length=0)
2 => string 'http://images.esellerpro.com/2477/I/418/07/07_!B-dzTQ!BWk~$(KGrHqQOKnMEy1t9tWyLBM8tHiFEnQ~~0_1.JPG' (length=98)
3 => string '' (length=0)
4 => string '' (length=0)
5 => string '' (length=0)
6 => string '5055496500300 ' (length=17)
7 => string 'STYLUS-5530-WHITE - STOCK CONTROL' (length=33)
8 => string ' 100% Brand New Made from high quality material to ensure good quality Prevent Scratches bumps grease and finger prints on the screen You can now easily use the mobile or text people with the stylus Designed to be used with your touch screen mobile Compatible with: Nokia : 5530 Xpress MusicPackage Contents: 1 x Stylus for Nokia 5530 Xpress Music - White ' (length=386)
9 => string '' (length=0)
10 => string '' (length=0)
11 => string '' (length=0)
12 => string '' (length=0)
13 => string '' (length=0)
14 => string '-1' (length=2)
15 => string '' (length=0)
16 => string '' (length=0)
17 => string 'Frooition' (length=9)
18 => string '' (length=0)
EDIT2:原帖:
3PREPAY-ZTEMF627W1GB http://images.esellerpro.com/2477/I/217/94/03_!B8Zel8w!2k~$(KGrHqJ!hYEyrrVkKNYBM28dwn4o!~~0_1.JPG 5.0555E+12 ZTE MF627 THREE PAY BROADBAND USB MODEM WITH 1GB READY New ZTE MF627 on Three Pay Broadband with 1GB allowance IncludedGet broadband speeds with no wires or hassles. Just plug this lightweight USB Modem into your laptop and watch as everything auto-installs whether you’re on Windows or Mac. Easy. The user friendly dashboard is also a breeze (so you don’t need any technical knowledge) and it lets you send and receive text messages while you’re online.The MF627 gives you download speeds of up to 3.6 Mbps. Plus you can use your new best friend as a memory stick just add a MicroSD card to the slot and load up to 4GB. And don’t ever worry about losing the lid because it’s connected with a handy strap! Compatible with: Most Desktops and Laptops (Also supports Windows 7 and Mac OS X 10.6)Packing Contents:1 X Brand New ZTE MF627 USB Model on Three Pay as you go Broadband - 1GB Allowance Included Maximum 1 per customer please. -1 Frooition
答案 0 :(得分:1)
这是你的问题..
它是你的第二次爆炸......
$rows[$count][8][0] = explode("Compatible", $rows[$count][8][0]);
如果该行不包含Features,则$ count [8]不会展开并调入数组。在你的var_dump $ rows中[$ count] [8]只是一个字符串而$ rows [$ count] [8] [0]不存在。更改行来执行此操作..
$rows[$count][8] = explode("Compatible", $rows[$count][8]);
但你可能不想考虑将其放在else语句中而不是改变它。因为如果字符串包含Features并且爆炸,你现在拥有的东西将会起作用。因此,我建议的行应该在Else语句中,因为功能不是字符串的分开而且$ rows [$ count] [8]永远不会爆炸。
$rows;
$count = 0;
while (($row = fgetcsv($files, 56000)) !== false) {
$rows[$count] = $row;
if (stristr($rows[$count][8], "Features:")) {
$rows[$count][8] = str_replace("Features:", "features", $rows[$count][8]);
$rows[$count][8] = str_replace(":", "", $rows[$count][8]);
$rows[$count][8] = explode("features", $rows[$count][8]);
if (isset($rows[$count][8][1])) {
$rows[$count][8][1] = str_replace("Compatible", "compatible", $rows[$count][8][1]);
$rows[$count][8][1] = explode("compatible", $rows[$count][8][1]);
//$rows[$count][8][1] = explode("Compatible", $rows[$count][8][1]); produces error if used
$rows[$count][8][1][0] = explode("-", $rows[$count][8][1][0]);
} else if (isset($rows[$count][8][0])) {
$rows[$count][8][0] = str_replace("Compatible", "compatible", $rows[$count][8][0]);
$rows[$count][8][0] = explode("compatible", $rows[$count][8][0]);
//$rows[$count][8][0] = explode("Compatible", $rows[$count][8][0]); produces error if used
$rows[$count][8][0][0] = explode("-", $rows[$count][8][0][0]);
} else {
$rows[$count][8] = str_replace("Compatible", "compatible", $rows[$count][8]);
$rows[$count][8] = explode("compatible", $rows[$count][8]);
//$rows[$count][8] = explode("Compatible", $rows[$count][8]); produces error if used
$rows[$count][8] = explode("-", $rows[$count][8][0]);
}
$countif = 1;
while (isset($rows[$count][8][1][0][$countif])) {
$countif++;
}
$max = $countif - 2;
$countif = 9;
$counter = 1;
while ($max <= 5 && $max >= 1 && $countif <= 13) {
$rows[$count][$countif] = $rows[$count][8][1][0][$counter];
$countif++;
$counter++;
}
$rows[$count][8][0] = explode("Compatible", $rows[$count][8][0]);
//$rows[$count][8] = $rows[$count][8][0][0];
}
else // THE STRING DOESN'T CONTAIN "Features"
{
$rows[$count][8] = explode("Compatible", $rows[$count][8]);
}
$count++;
}
答案 1 :(得分:0)
如果您的数据与我的想法相符,则不会检查字符串中是否存在“兼容”。怎么样:
if (stristr($rows[$count][8], "Features:")) {
$rows[$count][8] = str_replace("Features:", "features", $rows[$count][8]);
$rows[$count][8] = str_replace(":", "", $rows[$count][8]);
$rows[$count][8] = explode("features", $rows[$count][8]);
} elseif (stristr($rows[$count][8], "Compatible:")) {
$rows[$count][8][1] = str_replace("Compatible", "compatible", $rows[$count][8][1]);
$rows[$count][8][1] = explode("compatible", $rows[$count][8][1]);
$rows[$count][8][1][0] = explode("-", $rows[$count][8][1][0]);
...