Как найти самое маленькое число в коде?

Urch

Вебмастер
Регистрация
3 Янв 2008
Сообщения
255
Реакции
74
Имеется код вида:
HTML:
<table width="200" border="1">
  <tr>
    <td>Satellite C850-C1K</td>
    <td>63 972
</td>
    <td>ButtonKZ
</td>
  </tr>
  <tr>
    <td>Satellite C850-C1K</td>
    <td>65 800
</td>
    <td>ТОО Reaching ray
</td>
  </tr>
  <tr>
    <td>Satellite C850-C1K</td>
    <td>66 500
</td>
    <td>Cals Computers
</td>
  </tr>
</table>
Нужно средствами php найти строку с наименьшим числом и выделить ее цветом.
 
PHP:
<?
$s='<table width="200" border="1">
  <tr>
    <td>Satellite C850-C1K</td>
    <td>63 972
</td>
    <td>ButtonKZ
</td>
  </tr>
  <tr>
    <td>Satellite C850-C1K</td>
    <td>65 800
</td>
    <td>ТОО Reaching ray
</td>
  </tr>
  <tr>
    <td>Satellite C850-C1K</td>
    <td>66 500
</td>
    <td>Cals Computers
</td>
  </tr>
</table>';
 
preg_match_all('/<td>\s*([0-9\s]+)\s*<\/td>/i', $s, $a);
if(count($a[1]) > 0){
    $min = min($a[1]);
    $s = preg_replace('/<td>\s*'.$min.'\s*<\/td>/i', '<td><span style="color:red;">'.$min.'</span></td>', $s);
}
echo $s;
 
  • Нравится
Реакции: Urch
а как найти наименьшее число и подсветить его в каждой таблице, если таких таблиц в одном документе несколько?
Например:
HTML:
<table width="200" border="1">
  <tr>
    <td>Satellite C850-C1K</td>
    <td>63 972
</td>
    <td>ButtonKZ
</td>
  </tr>
  <tr>
    <td>Satellite C850-C1K</td>
    <td>65 800
</td>
    <td>ТОО Reaching ray
</td>
  </tr>
  <tr>
    <td>Satellite C850-C1K</td>
    <td>66 500
</td>
    <td>Cals Computers
</td>
  </tr>
</table>
 
<table width="200" border="1">
  <tr>
    <td>Satellite C850-C1K</td>
    <td>63 972
</td>
    <td>ButtonKZ
</td>
  </tr>
  <tr>
    <td>Satellite C850-C1K</td>
    <td>65 800
</td>
    <td>ТОО Reaching ray
</td>
  </tr>
  <tr>
    <td>Satellite C850-C1K</td>
    <td>66 500
</td>
    <td>Cals Computers
</td>
  </tr>
</table>
 
тогда разделить на таблицы и искать в каждой, отметить и соединить
PHP:
<?
 
$s = '<table width="200" border="1">
      <tr>
        <td>Satellite C850-C1K</td>
        <td>63 972
    </td>
        <td>ButtonKZ
    </td>
      </tr>
      <tr>
        <td>Satellite C850-C1K</td>
        <td>65 800
    </td>
        <td>ТОО Reaching ray
    </td>
      </tr>
      <tr>
        <td>Satellite C850-C1K</td>
        <td>66 500
    </td>
        <td>Cals Computers
    </td>
      </tr>
    </table>
 
    <table width="200" border="1">
      <tr>
        <td>Satellite C850-C1K</td>
        <td>63 972
    </td>
        <td>ButtonKZ
    </td>
      </tr>
      <tr>
        <td>Satellite C850-C1K</td>
        <td>65 800
    </td>
        <td>ТОО Reaching ray
    </td>
      </tr>
      <tr>
        <td>Satellite C850-C1K</td>
        <td>66 500
    </td>
        <td>Cals Computers
    </td>
      </tr>
    </table>
 
';
 
$sa = explode('<table', $s);
foreach($sa as $id=>$val){
    preg_match_all('/<td>\s*([0-9\s]+)\s*<\/td>/i', $val, $a);
    if(count($a[1]) > 0){
        $min = min($a[1]);
        $sa[$id] = preg_replace('/<td>\s*'.$min.'\s*<\/td>/i', '<td><span style="color:red;">'.$min.'</span></td>', $val);
    }
}
$s = implode('<table', $sa);
echo $s;
 
а можно сделать так чтобы подсвечивалась цена в пределах одного товара в данном случае это SATELLITE C850-D4K, C850-C1K и L870D-D3W
Пример кода:


Добавил одно новое поле, теперь цены не выделяются

 
там таблица в первом столбике название, во втором цена, так что можно универсально для любых названий, берём в массив в котором индекс будет название, значения будут цены, находим минимальное значение и заменяем в тексте красным
PHP:
$s = '<table ...';
$m = array();
preg_match_all('/<tr>\s*<td>([^<]+)<\/td>\s*<td>([^<]+)<\/td>/i', $s, $a);
if(count($a[1]) > 0){
    foreach($a[1] as $id=>$val){
        $m[$val][] = $a[2][$id];
    }
 
    foreach($m as $name=>$price){
        $min = min($m[$name]);
        $s = preg_replace('/<tr>\s*<td>'.$name.'<\/td>\s*<td>'.$min.'<\/td>/i', '<tr><td>'.$name.'</td><td><span style="color:red;">'.$min.'</span></td>', $s);
    }
}
echo $s;
 
Назад
Сверху