Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   Подсчет строк ячейки в таблице html (http://forum.oszone.net/showthread.php?t=349779)

ivan.vas 11-10-2021 14:42 2968518

Подсчет строк ячейки в таблице html
 
Добрый день.
Подскажите, вообще реально ли на php сделать такую вещь. Необходимо посчитать сколько значений в ячейке. Есть 8 столбцов, последний столбец при выводе строки переходит на другую строку и выводит еще результат если такой есть.
Пример части таблицы такой:
HTML код:

<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>
NOTE - 1
<br>NOTE - 2
<br>NOTE - 3
<br>NOTE - 4
<br>NOTE - 5
<br>NOTE - 6
<br>NOTE - 7
</td>
</tr>

Как посчитать количество NOTE - Х ?

Если считать количество br, то не получится ли так, что я посчитаю br на всей странице?

Sham 11-10-2021 18:26 2968542

DOMXpath'ом можно
Код:

$doc = new \DOMDocument();
$doc->loadHTML(<<<'STR'
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>
NOTE - 1
<br>NOTE - 2
<br>NOTE - 3
<br>NOTE - 4
<br>NOTE - 5
<br>NOTE - 6
<br>NOTE - 7
</td>
</tr>
STR
);
$xpath = new \DOMXpath($doc);
$elements = $xpath->query('//tr/td[8]/br');
var_dump($elements->length);//кол-во тегов br


ivan.vas 12-10-2021 13:01 2968598

Sham, подскажите, а как быть, когда вывод в таблице будет:
HTML код:

<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>NOTE - 1</td>
</tr>

Имеется ввиду будет отсутствовать тег <br>

Sham 12-10-2021 17:13 2968618

Надо структуру документа знать и как образуются эти NOTE. Если считается количество ячеек td, то это можно и в xpath посчитать, а не использовать regexp'ы.

ivan.vas 12-10-2021 17:31 2968619

Sham, значения берутся из базы.
PHP код:

<?php
        
require_once("db.php");
        
$conn mysqli_connect($server$username$password$database);
        if (
$conn === false) {
                die(
"Ошибка: " mysqli_connect_error());
                }
                
$sql "SELECT * FROM $db_table ORDER BY $db_table.User DESC";
                if(
$result $conn->query($sql)){
                        
$rowsCount $result->num_rows;
                        echo 
"$rowsCount";
                }
        
?>

после выводятся в html:
Код:

<table class="table table-striped">
  <thead>
    <tr>
                <th scope="col">1</th>
                <th scope="col">2</th>
                <th scope="col">3</th>
                <th scope="col">4</th>
                <th scope="col">5</th>
                <th scope="col">6</th>
                <th scope="col">7</th>
                <th scope="col">8</th>
    </tr>
  </thead>
  <tbody>
        <?php foreach($result as $row){ ?>
    <tr>
      <td><?php echo $row["1"] ?></td>
      <td><?php echo $row["2"] ?></td>
      <td><?php echo $row["3"] ?></td>
      <td><?php echo $row["4"] ?></td>
      <td><?php echo $row["5"] ?></td>
      <td><?php echo $row["6"] ?></td>
      <td><?php echo $row["7"] ?></td>
          <?php $row["8"] = str_replace(PHP_EOL, '<br>', $row["8"]); ?>
      <td><?php echo $row["8"] ?></td>
    </tr>
        <?php } ?>
  </tbody>
 
</table>

В зависимости от количества строк в 8 столбце, происходит переход на новую строку.

Sham 12-10-2021 18:51 2968626

В таблице 8 колонок и неограниченное количество строк. 8-ая ячейка в каждой строке содержит этот список, который уже лежит в базе. Считать нужно все NOTE по всей 8 колонке? Проще наверное узнать, как формируется этот список и сделать отдельный запрос в базу. PHP_EOL - системо-зависимая константа, а должен заменяться конкретный знак переноса, который в базе.


Время: 02:22.

Время: 02:22.
© OSzone.net 2001-