3

我需要找到 CSV 中所有列的最小值和最大值,并将这些值用于我网页中的滑块。最初,我正在确定 CSV 文件中的总列数,并根据总列数创建许多滑块(如亚马逊的价格滑块)。这是用于创建滑块的代码。

<?php
for ( $i = 1; $i < $totalcolumns; $i++ ) { 
    echo '<input type="text" data-slider="true" data-slider-range="1,500" data-slider-step="1"/>';
}
?> 

在上面的代码中,数据滑块范围为 1,500但是,我需要根据 CSV 列的最小值和最大值来定义这些值。如果我事先知道我的总列数,我可以确定链接中讨论的所有列的最小值和最大值。

假设如果我的 CSV 文件中有 5 列,我需要包含 5 个滑块并找到所有 5 列的最小值和最大值,并将它们用作上述代码中的数据滑块范围

有人可以以正确的方式指导我吗?我不确定这是否要在 PHP 或 javascript 中完成,因为这对这些技术来说是全新的。

编辑:

为了找到总列,我使用了另一个 PHP 文件,其中使用了下面的代码。

$handle = fopen('demo.csv', 'r');
if (($data = fgetcsv($handle, 1000, ',')) !== false) {
}

然后,我使用 SESSION 将 count($data) 传递给我当前的 PHP 文件。

$_SESSION["totalcolumns"] = count($data);

在我当前的 PHP 文件中,我正在访问 CSV 文件中的总列,如下所示。

$totalcolumns = $_SESSION["totalcolumns"];
4

1 回答 1

3

您需要修改您到达的部分代码$totalcolumns

$data = [];
$total_columns = 0;
$handle = fopen('data.csv', 'r');

while (false !== ($row = fgetcsv($handle, 1000, ','))) {
    0 === $total_columns and $total_columns = count($row);

    $i = 0;
    while (++$i <= $total_columns) {
        $data[$i][] = (int) $row[$i - 1];
    }
}

$i = 0;
while (++$i <= $total_columns) {
    $_SESSION["min-column-$i"] = min($data[$i]);
    $_SESSION["max-column-$i"] = max($data[$i]);
}

$_SESSION['totalcolumns'] = $total_columns;
fclose($handle);

对于这样的 data.csv

3,4,5,6,7
10,8,1,8,8
3,6,7,8,2

你会有这个$_SESSION值:

var_dump($_SESSION);
array(11) {
    'min-column-1' => int(3)
    'max-column-1' => int(10)
    'min-column-2' => int(4)
    'max-column-2' => int(8)
    'min-column-3' => int(1)
    'max-column-3' => int(7)
    'min-column-4' => int(6)
    'max-column-4' => int(8)
    'min-column-5' => int(2)
    'max-column-5' => int(8)
    'totalcolumns' => int(5)
}

然后你就可以像这样使用范围值:

$i = 0;
while (++$i <= $_SESSION['totalcolumns']) {
    $range = $_SESSION["min-column-$i"] . ',' . $_SESSION["max-column-$i"];
    echo '<input type="text"
                 data-slider="true"
                 data-slider-range="', $range, '"
                 data-slider-step="1"/>';
}
于 2013-10-02T07:40:22.813 回答