被解析的桌的数字格式与simple_html_dom的

时间:2018-04-07 15:09:23

标签: php dom html-table numbers format

我想格式化我使用simple_html_dom解析的表格单元格的内容。该表存在单词,整数或数字,没有dec-points和浮点值,有2个dec-points。我希望它们看起来像这样:

before -> after
"abc" --> "abc" (can stay as they are)
"17" --> "17" (can stay as they are)
"24.24" --> "24.2" (rounded)
"24.29" --> "24.3" (rounded)

我已使用此代码格式化浮点值,但在此示例中整数格式化为17.1。我已尝试使用!is_integer($td),但后来没有任何变化。

$table = $html->find('table', 2);
$rowData = array();

// Selected Columns
$columnNumbers = [ 5, 6, 7, 8, 9, 10, 11, 12, 13];

// Loop
foreach($table->find('tr') as $row) {
    // initialize array to store the cell data from each row
    $flight = array();
    foreach($row->find('td') as $columnNumber => $cell) {
        // push the cell's text to the array
        if ( in_array( $columnNumber, $columnNumbers ) ) {
            $flight[] = $cell->plaintext;
        }
    }
    foreach($row->find('th') as $columnNumber => $cell) {
        // push the cell's text to the array
        if ( in_array( $columnNumber, $columnNumbers ) ) {
            $flight[] = $cell->plaintext;
        }
    }
    $rowData[] = $flight;
}

foreach ($rowData as $row => $tr) {
    echo '<tr>';
    foreach ($tr as $td)
        if (!is_numeric($td)) {
            echo "<td>$td</td>\n";
        } 
        else {
            echo "<td>".number_format(floatval ($td), 1)."</td>\n";
        }
    }
    echo '</tr>';
}

1 个答案:

答案 0 :(得分:0)

所以,问题在线:

echo "<td>".number_format(floatval ($td), 1)."</td>\n";

number_format( $value, $n );将$ n十进制设置为处理的任何$ value。 只有当{0}小数超过$ n时,round( $value, $n );才会将任何$值四舍五入到$ n小数。

此外,在第二个foreach循环中,您有($rowData as $row => $tr)而没有使用$row。 手册说:

  

表格还会将当前元素的键分配给$键   每次迭代的变量

这意味着每次迭代都需要不必要的过程。