Когда использовать оператор приращения для строк в PHP?

Я впервые изучаю PHP, и меня удивляет, что язык позволяет использовать оператор приращения для строк.

     $foo = 'xyZ';
     print ++$foo; // prints xzA

Учебники, которые я могу найти по этой теме, представляют только игрушечные примеры. Я был бы признателен, если бы вы упомянули ситуацию, когда использование этой "функции" полезно.

Заранее спасибо!


person Helmyano    schedule 28.06.2013    source источник


Ответы (4)


I would be grateful if you mention a situation where using this 'feature' is beneficial.

Это может быть очень полезной функцией...

Пример

$guess = "21661093e56e24cd60b10092005c4ac7";
$next = "aaaa";
$count = 0;
while(md5($next) !== $guess) {
    $next ++;
    $count ++;
}
printf("Found `%s` after %s loops", $next, number_format($count));

Вывод

Found `baba` after 17,602 loops

В любом случае, я не собираюсь взламывать PIN-код или пароль в ближайшее время.

person Baba    schedule 28.06.2013

взгляните на раздел под названием «Пример № 1 арифметических операций над символьными переменными» на http://php.net/manual/en/language.operators.increment.php — вы можете использовать оператор приращения для добавления символов и последовательностей в строку.

person Kallum Tanton    schedule 28.06.2013
comment
Это не то, о чем спрашивают. - person Jason McCreary; 28.06.2013
comment
Мои извинения, я просто надеялся, что это прольет свет на некоторые основные способы использования этой функции. - person Kallum Tanton; 28.06.2013

На самом деле символ — это число. Вам следует взглянуть на таблицу ASCII http://en.wikipedia.org/wiki/ASCII

Преобразование числа в документацию php charachter http://php.net/manual/en/function.chr.php

$test = 'a'; 
$test++;
echo($test);

Как вы можете видеть в таблице ASCII, числовое представление «a» = 97 и «b» = 98, поэтому отображается «b».

person Sander Visser    schedule 28.06.2013
comment
Это на самом деле не объясняет переворачивание. т.е. Увеличение z дает aa. - person Jim; 28.06.2013
comment
Вы совершенно правы - person Sander Visser; 28.06.2013

Взято из документации, PHP следует соглашению Perl при работе с арифметическими операциями над характерные переменные:

Например, в PHP и Perl $a = 'Z'; $а++; превращает $a в 'AA', а в C a = 'Z'; а++; превращает a в '[' (значение ASCII 'Z' равно 90, значение ASCII '[' равно 91). Обратите внимание, что символьные переменные могут увеличиваться, но не уменьшаться, и даже в этом случае поддерживаются только простые символы ASCII (a-z и A-Z). Увеличение/уменьшение других символьных переменных не влияет, исходная строка остается неизменной.

Хотя я лично не использовал эту возможность, я могу выделить несколько преимуществ, связанных с соглашением Perl, в отличие от C. Это увеличение в пределах альфа-диапазона, а не просто увеличение значения ASCII.

Оставаясь в альфа-диапазоне, мы, по сути, говорим о системе счисления с основанием 26 системе счисления ( используя буквы). Так же, как 9 увеличивается до 10 (перенос), z увеличивается до aa.

Что сразу приходит на ум, так это хеш-последовательности символов.

public static function nextSeed() {
   // $seed = abc
   return strtolower(++self::$seed);
   // $seed = abd
}

Хотя, вероятно, такие семена будут управляться вне PHP, тем не менее, PHP имеет преимущество в том, что в противном случае потребовалось бы больше кода.

Другие варианты использования:

  • Представление системы счисления с основанием 26
  • Вычисление различий символов
  • Шифрование
person Jason McCreary    schedule 28.06.2013