我正在尝试使用空格作为分隔符来进行一个非常简单的列表爆炸。但是,我对以下字符串有一些问题......
“+ 0.59 - + 0.58%”“+ 0.06 - + 0.14%”“ - 0.47 - -1.07%”“ - 0.77 - -0.20%”//输入
并且应该由每个空格分隔的结果数组(引号也被删除)
数组([0] => +0.59 [1] => - [2] => + 0.58%+0.06 [3] => - [4] => + 0.14%-0.47 [ 5] => - [6] => -1.07%-0.77 [7] => - [8] => -0.20%)
基本上没有正确识别空格。我已经尝试通过/ n / r和'/ \ s * / m'分离它。
以下是我的代码片段。
$open = fopen("http://finance.yahoo.com/d/quotes.csv?s=$ticker&f=c&e=.csv", "r");
$quote = fread($open, 2000);
fclose($open);
$quote = explode(" ", $quote);
foreach ($quote as &$value) {
$value = str_replace('"',"",$value);
}
//print_r($tickerlist);
print_r($quote);
答案 0 :(得分:2)
在适当的编辑器中打开一个文件(vim对此很好。也许是notepad ++)并检查tab
字符以及\r
和\n
。
答案 1 :(得分:0)
这会有用吗?
$newArr = explode('" "', $quote);
答案 2 :(得分:0)
如果要转换数据,只需使用此函数将csv文件解析为数组即可。
function csv2array($string, $separatorChar = ',', $enclosureChar = '"', $newlineChar = "\n")
{
$array = array();
$size = strlen($string);
$columnIndex = 0;
$rowIndex = 0;
$fieldValue = "";
$isEnclosured = False;
for($i=0; $i<$size;$i++)
{
$char = $string{$i};
$addChar = "";
if($isEnclosured)
{
if($char == $enclosureChar)
{
if($i+1<$size && $string{$i+1} == $enclosureChar)
{
$addChar = $char;
$i++;
}
else
{
$isEnclosured = false;
}
}
else
{
$addChar=$char;
}
}
else
{
if($char==$enclosureChar)
{
$isEnclosured = true;
}
else
{
if($char==$separatorChar)
{
$array[$rowIndex][$columnIndex] = $fieldValue;
$fieldValue = "";
$columnIndex++;
}
elseif($char==$newlineChar)
{
//echo $char;
$array[$rowIndex][$columnIndex] = $fieldValue;
$fieldValue="";
$columnIndex=0;
$rowIndex++;
}
else
{
$addChar=$char;
}
}
}
if($addChar != "")
{
$fieldValue.=$addChar;
}
}
if($fieldValue)
{
$array[$rowIndex][$columnIndex] = $fieldValue;
}
return $array;
}
这将只以其关联形式解析所有内容并返回该数组。