0

これは何度も尋ねられた可能性がありますが、Google全体で最良の回答を得ることができませんでした. 私を助けてください。

問題

外国為替レートの残りの API からデータを取得しています。これは、印刷したときの返信の外観とまったく同じです。

EUR/USD,1380039070258,1.34,868,1.34,873,1.34641,1.35193,1.34932
USD/JPY,1380039068699,98.,789,98.,797,98.471,99.180,98.838
GBP/USD,1380039067482,1.60,082,1.60,095,1.59546,1.60500,1.60419
EUR/GBP,1380039067816,0.84,245,0.84,256,0.84067,0.84495,0.84127
USD/CHF,1380039064893,0.91,161,0.91,172,0.90974,0.91338,0.91097
EUR/JPY,1380039066371,133.,236,133.,252,132.697,134.008,133.371
EUR/CHF,1380039063317,1.22,951,1.22,966,1.22853,1.23050,1.22919
USD/CAD,1380039062062,1.02,960,1.02,969,1.02655,1.03111,1.02841
AUD/USD,1380039069019,0.93,957,0.93,968,0.93635,0.94329,0.94307
GBP/JPY,1380039066561,158.,149,158.,170,157.342,158.978,158.552

各行にはカンマ区切りのデータが含まれており、次の行は次の行にあることに注意してください。

このデータを応答変数に保存し、$resp以下のコードを使用すると

$result=str_getcsv($resp, "\n");
pr($result);

以下のように期待される結果が得られます

Array
(
    [0] => EUR/USD,1380039070258,1.34,868,1.34,873,1.34641,1.35193,1.34932
    [1] => USD/JPY,1380039068699,98.,789,98.,797,98.471,99.180,98.838
    [2] => GBP/USD,1380039067482,1.60,082,1.60,095,1.59546,1.60500,1.60419
    [3] => EUR/GBP,1380039067816,0.84,245,0.84,256,0.84067,0.84495,0.84127
    [4] => USD/CHF,1380039064893,0.91,161,0.91,172,0.90974,0.91338,0.91097
    [5] => EUR/JPY,1380039066371,133.,236,133.,252,132.697,134.008,133.371
    [6] => EUR/CHF,1380039063317,1.22,951,1.22,966,1.22853,1.23050,1.22919
    [7] => USD/CAD,1380039062062,1.02,960,1.02,969,1.02655,1.03111,1.02841
    [8] => AUD/USD,1380039069019,0.93,957,0.93,968,0.93635,0.94329,0.94307
    [9] => GBP/JPY,1380039066561,158.,149,158.,170,157.342,158.978,158.552
    [10] => 
)

これは私のローカルホストサーバーで完全に機能しますが、展開すると以下のエラーが発生します

Call to undefined function str_getcsv()

サーバーは、str_getcsv()私が使用しようとしたその機能を認識していないようです。

私は他の機能を使用しようとしfgetcsv()ましたが、私が望むものを得ることができませarray outputん。

以下は、私が fgetcsv() を使用した方法です

$fh = fopen('php://memory', 'rw'); 
fwrite($fh, $resp);
rewind($fh);
$result = fgetcsv( $fh, strlen($resp), ',', ' ');
fclose($fh); 
pr($result);

しかし、それは文字列の最初の行のみを選択し$resp、ここにそれが与える出力があります

Array
(
    [0] => EUR/USD
    [1] => 1380040007538
    [2] => 1.34
    [3] => 882
    [4] => 1.34
    [5] => 890
    [6] => 1.34641
    [7] => 1.35193
    [8] => 1.34932
)

それでも$resp、最初の配列のように、配列でインデックス付けされた文字列のすべての行が必要です

文字列を目的の配列に変換することで、これを機能させることができる場合は、事前に感謝します。

4

2 に答える 2

1

explode("\n", $resp)行の配列を取得するために使用できます。

于 2013-09-24T16:26:32.187 に答える
0

ドキュメントやGoogleをチェックするように言われた人は正しいです。ソフトウェアの開発は、コードを入力するだけでなく、読書と研究の重要な部分でもあります。

古いバージョンの php を実行していて、それを更新する必要があるため、サーバーが生成するエラーが発生する可能性が非常に高くなります。ここでもセキュリティがキーワードです。この関数http://php.net/manual/en/function.str-getcsv.phpは 5.3 以降でサポートされているためです。

さらに、最初のコメントには、その機能なしで同じものをアーカイブする方法の例が含まれています。

function csv_to_array($filename='', $delimiter=',')
{
    if(!file_exists($filename) || !is_readable($filename))
        return FALSE;

    $header = NULL;
    $data = array();
    if (($handle = fopen($filename, 'r')) !== FALSE)
    {
        while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
        {
            if(!$header)
                $header = $row;
            else
                $data[] = array_combine($header, $row);
        }
        fclose($handle);
    }
    return $data;
}

私はそれをテストしていません、それはあなたの仕事です。

その後のコメントには、関数が欠落している場合のさらに詳細な置換があります。

于 2013-09-24T16:31:17.143 に答える