PHP строка взорвать проблему через интервал - PullRequest
0 голосов
/ 29 июля 2011

Я пытаюсь создать очень простой список, используя пробелы в качестве разделителей.Однако у меня есть некоторые проблемы со следующей строкой ...

"+ 0,59 - + 0,58%" "+0,06 - + 0,14%" "-0,47 - -1,07%" "-0,77 - -0,20% "// Input

И результирующий массив, который должен быть разделен каждым пробелом (кавычки также удалены)

Array ([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 ]

2 голосов
/ 29 июля 2011

Откройте файл в соответствующем редакторе (для этого подойдет vim. Возможно notepad ++) и проверьте наличие символов tab и \r и \n.

0 голосов
/ 29 июля 2011

Если вы хотите преобразовать данные, вы можете просто использовать эту функцию для разбора файла 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;
}

это просто проанализирует все в его ассоциативной форме и вернет вам этот массив.

0 голосов
/ 29 июля 2011

Будет ли это работать?

$newArr = explode('" "', $quote);
...