Используя PHP, как я могу создать счетчик, который превращает любое значение Int в 1-9999?

#php #math #modulus

#php #математика #модуль

Вопрос:

У меня есть внутренний счетчик, который отсчитывает от 0-99999999999999.

Я бы хотел, чтобы это отображалось как число в диапазоне от 0 до 99999, затем повторное выполнение.

Это означает:

  • 0 отображается как 1
  • 1 отображается как 2
  • 9998 отображается как 9999
  • 9999 отображается как 1
  • 10000 отображается как 2
  • 19999 отображается как 1
  • 20000 отображается как 2

Редактировать:

Ответом было 1 $ number % 9999 (спасибо @Brad Christie). Моя таблица ожидаемых результатов неверна. (Спасибо @Tevo D)

Комментарии:

1. Вы слышали об операторе modulo (%)?

2. @djdy, по модулю, но у меня возникли проблемы с поиском элегантного ответа, который работает последовательно для всех чисел.

3. Что вы подразумеваете под «все большими остатками»? % является остатком после деления и всегда равно 0 .. модуль-1

Ответ №1:

 $x = 9280293;
$baseNineNineNineNine = $x % 9999;
  

Используйте MOD, он выдаст вам остаток после 9999 (например, любое число, деленное на 9999, может идти в N раз, с остатком от Y (в итоге вы получите Y в качестве значения)

Для чисел, которые вы ищете, вы можете использовать 1 любое значение, полученное после MOD ( % ), или использовать 10000

Смотрите также Оператор модуля

Комментарии:

1. @JarebShubway: Я не уверен, что тогда я получу шаблон. X % 9999 1 дает вам то, что вы хотите, за исключением 1999 amp; 20000 крайних случаев. Что делает эти два числа особенными? (Смотрите этот пример )

Ответ №2:

Примите напоминание с 10000, что гарантирует, что результат будет между 0 и 9999 и перевернется

 $result = $int % 10000;
  

Комментарии:

1. использование % 10000 превратит числа типа 20000 в 0, чего я не хочу. Добавление 1 превратит 9999 в 10000, что также не то, чего я хочу.

Ответ №3:

Ваша таблица значений не соответствует тому, что вы запрашиваете. В примере вы используете 9999 значений результата (1-9999) для 10000 входных значений. В тексте вы указываете 10000 выходных значений (0-9999).

Вот то, о чем, я думаю, вы действительно просите. Этот алгоритм выведет 1-9999, а затем снова перейдет к 1.

Другими словами, это решение предоставит четырехзначное ненулевое значение:

 $result = $int % 9999   1;
  

Выходные данные не будут соответствовать вашему примеру, поскольку в вашем примере он переносится на каждые 10000 значений, а не на 9999. Вот результат:

 input   output
0       1
1       2
....      ....
9997      9998
9998      9999
9999      1       <--- 9999 * 1
10000     2
....      ....
19996     9998
19997     9999
19998     1       <--- 9999 * 2
19999     2
....      ....
19995     9998
19996     9999
19997     1       <--- 9999 * 3
19998     2
....      ....
  

Комментарии:

1. Замечание принято, и молодец, что ты единственный, кто это распознал. Похоже, вы правы!