2016-11-29 1 views
0

Mit Curl:Finding MAX-Wert der rohen CSV-Daten für bestimmte Spalt in PHP

$url = $some_site; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch); 
curl_close($ch); 

wo der '$ output' Variable die folgenden 7 Spalten enthält (Anzahl der Zeilen variiert):

1 , a, 6045,6168,6731,6847,522800

2, b, 7847,8124,7645,7716,614400

3, c, 7288,7633,7150,7442,801800

4, d, 5546,5791,5460,5581,554200

5, e, 4579,4679,4359,4572,557400

etc ...

Wie Sie sehen können, in die vierte Spalte, die Zahlen sind:

Und die höchste Zahl ist: 8124

Ich versuche herauszufinden, wie die '$ output' Variable zu analysieren, so dass ich alle Zahlen in der 4. Spalte auswerten kann, um das Hoch zu bestimmen.

Ich habe versucht:

$csv = array_map('str_getcsv', $output); 
echo max($csv[4]); 

aber nichts zurückgegeben

+0

Und was ist der Wert von '$ csv'? –

+0

$ output ... $ output sind die Rohdaten, die von der Site abgerufen werden.Theoretisch sollte $ csv ein Array sein, das ich analysieren kann, um den MAX-Wert der 4. Spalte zu berechnen, aber was ich hier mache, gibt ein leeres Ergebnis zurück. – user6096423

+0

Ich fragte nach '$ csv', nicht '$ output' –

Antwort

0

Wenn Sie die Ausgabe Ihrer $csv Wert, den Sie werden sehen, dass es Array mit Struktur wie:

... 
[2] => Array 
    (
     [0] => 3 
     [1] => c 
     [2] => 7288 
     [3] => 7633 
     [4] => 7150 
     [5] => 7442 
     [6] => 801800 
    ) 

[3] => Array 
    (
     [0] => 4 
     [1] => d 
     [2] => 5546 
     [3] => 5791 
     [4] => 5460 
     [5] => 5581 
     [6] => 554200 
    ) 

[4] => Array 
    (
     [0] => 5 
     [1] => e 
     [2] => 4579 
     [3] => 4679 
     [4] => 4359 
     [5] => 4572 
     [6] => 557400 
    ) 
.... 

So Ihre $csv[4] ist nicht eine Liste von Werten aus Spalte 4. Es ist das fünfte Element Ihres Arrays. Sie müssen also weiter gehen, entweder mit einem einfachen foreach:

$max = 0; 
foreach ($csv as $row) { 
    // use index `3` because numeration starts with `0` 
    if ($max < $row[3]) { 
     $max = $row[3]; 
    } 
} 

Oder mit array_column (seit php5.5):

// take all values witn index `3` and find max 
echo max(array_column($csv, 3)); 

In beiden Fällen ist es 8124

0

Es ist weil str_getcsv nicht den Standards folgt und von der Ausgabe Sie haben ein "defekte Array" ... Ich nehme an, dass es so aussehen könnte:

Array 
(
    [0] => 1 
    [1] => a 
    [2] => 6045 
    [3] => 6168 
    [4] => 6731 
    [5] => 6847 
    [6] => 522800 
2 
    [7] => b 
    [8] => 7847 
    [9] => 8124 
    [10] => 7645 
    [11] => 7716 
    [12] => 614400 
3 
    [13] => c 
    [14] => 7288 
    [15] => 7633 
    [16] => 7150 
    [17] => 7442 
    [18] => 801800 
4 
    [19] => d 
    [20] => 5546 
    [21] => 5791 
    [22] => 5460 
    [23] => 5581 
    [24] => 554200 
5 
    [25] => e 
    [26] => 4579 
    [27] => 4679 
    [28] => 4359 
    [29] => 4572 
    [30] => 557400 
) 

http://sandbox.onlinephpfunctions.com/code/b5834d98eda11b1726adc9ef1b7592f9ba32242c

Sie können es wie folgt tun:

<?php 
// $csv is just a string ... output from Your curl will be same I think 
$csv = <<<EOT 
1,a,6045,6168,6731,6847,522800 
2,b,7847,8124,7645,7716,614400 
3,c,7288,7633,7150,7442,801800 
4,d,5546,5791,5460,5581,554200 
5,e,4579,4679,4359,4572,557400 
EOT; 

function csv2array($csv) { 
    $csv = str_getcsv($csv, PHP_EOL); 

    return array_map('str_getcsv', $csv); 
} 

function findMaxInColumn($array, $column = 3) { 
    return max(array_column($array, $column)); 
} 

$parsedCsv = csv2array($csv); 
print_r(findMaxInColumn($parsedCsv)); 

http://sandbox.onlinephpfunctions.com/code/82020f0d85acf8d6b15b5e7fd78a8d1a80618ff2