|
|
|
| Допустим имеется число ID:150, которому мы указываем число допустим 5, и нужно получить:
Если нужно меньше то получить числа 149,148,147,146,145
Если нужно больше то получить числа 151,152,153,154,155
можно в массив либо через запятую, как правильно сгенерировать? | |
|
|
|
|
|
|
|
для: web777
(10.02.2016 в 19:35)
| | в чём проблема-то?
показывайте свои попытки реализации алгоритма
если нужен готовый код, то это на коммерческой основе | |
|
|
|
|
|
|
|
для: Valick
(10.02.2016 в 19:58)
| | написал, две функции
<?php
function generate_minus($id,$diff)
{
$sum_start = ($id-$diff);
$sum_end = ($id+$diff);
$out = '';
$i=$sum_start;
while ($i < $sum_end) {
$out .= $i.',';
if ($i === $id) break;
$i++;
}
return $out;
}
|
и
<?php
function generate_plus($id,$diff)
{
$sum = ($id+$diff);
$i = $id;
$out = '';
while ($i < $sum) {
$out .= $i.',';
if ($i === $sum) break;
$i++;
}
return $out;
}
|
<?php
$id = '100';
echo generate_minus($id,'5');
echo generate_plus($id,'5');
|
с функцией generate_plus вроде всё в порядке, от числа формирует на большее как надо. А вот с функцией generate_minus на уменьшение не обрывается на числе $id | |
|
|
|
|
|
|
|
для: web777
(10.02.2016 в 20:21)
| |
<?php
function num_line($num, $delta){
if($delta == 0) return false;
if($delta > 0){
for($i = $num + 1; $i <= $num + $delta; $i++) $a[] = $i;
}else{
for($i = $num - 1; $i >= $num + $delta; $i--) $a[] = $i;
}
return $a;
}
$a = num_line(150, -5);
print_r($a);
?>
|
крайне не нравиться ваш $id уж не совершаете ли вы огромнейшую ошибку в своей жизни и не хотите таким образом вычислить идентификаторы строки для последующего использования в БД? | |
|
|
|
|
|
|
|
для: Valick
(10.02.2016 в 20:31)
| | ух ты)) как быстро)) Огромное Вам спасибо!
Да, именно под базу данных, для новостей, рядом с текущей новостью, будут отображаться несколько те, что рядом. А почему таким образом совершается ошибка? | |
|
|
|
|
|
|
|
для: web777
(10.02.2016 в 20:48)
| | > рядом с текущей новостью, будут отображаться несколько те, что рядом
учитесь работать с БД, раз уж её используете
> А почему таким образом совершается ошибка?
просто поверьте, не хотите верить читайте книги ;) | |
|
|
|
|
|
|
|
для: web777
(10.02.2016 в 20:48)
| | Просто представьте, что данные в базе НЕ лежат рядом. Это как картошка в коробке. Нет, шары от биллиарда с цифрами. У каждого шара есть идентификатор, но совсем не обязательно, что шар с номером один лежит рядом с шаром под номером два. Порядок можно навести, только сделав выборку с определенной сортировкой. Если трудно это понять, надо просто принять как данность - никакого порядка в базе нет. | |
|
|
|
|
|
|
|
для: elenaki
(11.02.2016 в 10:49)
| | ну в принципе верно, но я о другом, если есть id=149 и есть id=151, то это абсолютно не значит, что есть id с номером 150
ну и в конце концов получить 5 последующих или 5 -10-1000 пердыдущих записей от основной абсолютно не составляет труда, какими бы ни были там id | |
|
|
|
|
|
|
|
для: web777
(10.02.2016 в 19:35)
| |
<?
function numrange($a, $b) {
$a = range($a, $a + $b);
if($b < 0) array_reverse($a);
return implode(',', $a);
}
|
| |
|
|
|