找到PHP中特定列的原始CSV数据的最大值



使用curl:

 $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);

其中" $ output"变量包含以下7列(行#将变化):

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

等...

您可以看到,在第四列中,数字为:

6168 8124 7633 5791 4679

最高的数字是:8124

我试图弄清楚如何解析" $ output"变量,以便我可以评估第四列中的所有数字以确定高。

我尝试过:

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

但是什么都没有返回

如果输出$csv值,您会发现它是带有类似结构的数组:

...
[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
    )
....

因此,您的$csv[4]不是列中的值列表。这是您数组的第五个元素。因此,您需要使用简单的foreach

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

或使用array_column(因为 php5.5 ):

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

在这两种情况下都是8124

这是因为str_getcsv不遵循标准,从输出中,您有一个"损坏的数组" ...我想它看起来像这样:

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/b5834d98eda11b1726adc9ef1b7592f9ba3ba322242c

您可以这样做:

<?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/82020F0D85ACF8ACF8D6B15B5E7FD78A8A8D1A80618FF2

最新更新