PHP字符串通过间距爆炸问题

时间:2011-07-28 23:15:23

标签: php whitespace space spacing

我正在尝试使用空格作为分隔符来进行一个非常简单的列表爆炸。但是,我对以下字符串有一些问题......

“+ 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);

3 个答案:

答案 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;
}

这将只以其关联形式解析所有内容并返回该数组。