|
|
|
| Здраствуйте. такая задача.
есть некое количество записей (в базе), например 10 (но всегда больше 3, минимум 4)
1 2 3 4 5 6 7 8 9 10
есть число a, оно больше нуля (1,3,4,5.....)
что надо:
если a = 1, мы берем записи (выделенные) 1 2 3 4 5 6 7 8 9 10
если а = 2, мы берем 1 2 3 4 5 6 7 8 9 10
если а = 3, мы берем 1 2 3 4 5 6 7 8 9 10
если а = 4, мы берем 1 2 3 4 5 6 7 8 9 10
и так далее по кругу (движение слево направо).
Как это в теории (кода не надо) реализовать на пхп? | |
|
|
|
|
|
|
|
для: Valentin
(02.11.2007 в 16:56)
| | a = 1 ... 10 условия
n = 3 * (a - 1) + 1, если n > 10, то n = n % 10
n = позиции с которой нужно взять три знака
если n = 9, то третий знак с начала, если 10, то два ... вот этот перенос надо как-то описать еще. | |
|
|
|
|
|
|
|
для: sim5
(02.11.2007 в 18:56)
| | а может быть любым числом большем 1 ! | |
|
|
|
|
|
|
|
для: Valentin
(02.11.2007 в 19:16)
| | Ну из этого я и исходил, или я что-то не понял?
PS. Если допускается а больше 10, то все опять повторится, поэтому от а так же брать остаток по модулю 10. | |
|
|
|
|
|
|
|
для: sim5
(02.11.2007 в 19:26)
| | да, именно больше 10 | |
|
|
|
|
|
|
|
для: Valentin
(02.11.2007 в 19:58)
| | Ну и какие проблемы, я что-то не учел? До 10 включительно - гарантия, проверьте, а после десяти берите по модулю остаток, какой смысл учитывать десятки, сотни... | |
|
|
|
|
|
|
|
для: sim5
(02.11.2007 в 20:00)
| | код работает при a 2-4. уже при 5 - неадекватный лимит. вот незнаю как побороть...
<?
$num = 10;
$a = 4;
if ($a > 1)
{
if ($n > 10) $n = $n % 10;
$n = (3 * ($a - 1) + 1) - 1;
if (($num - $n) < 3)
{
echo "1.LIMIT " . $n . " " . ($num - $n);
echo "\n2.LIMIT " . (3 - ($num - $n));
}
else
{
echo "1.LIMIT " . $n . " 3";
}
}
|
| |
|
|
|
|
|
|
|
для: Valentin
(02.11.2007 в 20:35)
| |
<?
for ($a=1; $a<51; $a++) {
$m = $a > 10 ? $a % 10 : $a;
if ($m==0) $m = 10;
$n = 3*($m -1)+1;
$n = $n > 10 ? $n % 10 : $n;
echo 'Смещение: '.$n.'<br>';
?>
|
Меняйте а, я взял включительно до 50.
PS. Нет, в таком случае при а = 20, будет не верно, надо изменить.
Изменено. Проверьте, смещения указываются верно. | |
|
|
|
|
|
|
|
для: sim5
(02.11.2007 в 21:03)
| | Непонял а куда его вставлять? Он ведь не зависит не от чего, а должен зависить от от $num и от $a | |
|
|
|
|
|
|
|
для: Valentin
(03.11.2007 в 04:07)
| | За $num здесь берется 51.
$a проходится в цикле от 1 до $num. | |
|
|
|
|
|
|
|
для: Shiva
(03.11.2007 в 04:20)
| | Если $num взять от 1 до 13, то 5 смещение уже далеко не правильное (должно быть или 12 или 13, а сдесь 2) | |
|
|
|
|
|
|
|
для: Valentin
(03.11.2007 в 04:43)
| | Как это 12 и 13? У вас последовательность из 10 цифр (10 - по вашему условию, это одна), а значит и смещение не может быть больше 10. Вот из этого уловия и написано.
(>Как это в теории (кода не надо))
<?
$a = 1; //min
//сразу проверяем и обрезаем лишнее
$a = $a > 10 ? $a % 10 : $a;
if ($a==0) $a = 10;
//теперь узнаем смещение при текущем значении $a
$n = 3*($a -1)+1;
$n = $n > 10 ? $n % 10 : $n;
echo 'Смещение: '.$a;
?>
|
Если ваша строка будет более 10 символов, то и проверять нужно не по модулю 10. Нужно проверять длину исходной строки и по ее границе обрезать $a.
<?
$mas = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16);
$mod = count($mas);
$a = 12;
$a = $a > $mod ? $a % $mod : $a;
if ($a==0) $a = $mod;
$n = 3*($a -1)+1;
$n = $n > $mod ? $n % $mod : $n;
echo 'Смещение: '.$n;
?>
|
| |
|
|
|