2013-06-28 10 views
5

Sto imparando PHP per la prima volta e trovo sorprendente che la lingua consenta di utilizzare l'operatore di incremento sulle stringhe.Quando utilizzare l'operatore di incremento su stringhe in PHP?

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

Le esercitazioni che posso trovare su questo argomento introducono solo esempi di giocattoli. Sarei grato se menzioni una situazione in cui l'utilizzo di questa "funzionalità" è vantaggioso.

Grazie in anticipo!

+1

E 'un trucco, non è una caratteristica. SO non può rispondere al "perché" dietro il design del linguaggio, tranne che è stato [riportato da Perl] (http://stackoverflow.com/questions/6458068/increment-and-decrement-strings-in-perl) – mario

+2

The solo il tempo in cui posso pensare che sia utile sarebbe se una serie di stringhe venissero testate come condizionali. Invece di scrivere un test per ognuno, sarebbe utilizzato un ciclo for per testare ciascuno di essi. – asimes

+0

Gli ID delle colonne MS Excel incrementano "A" da "Z", "AA" a "AZ", "BA" a "BZ", ecc., Facendo corrispondere questo modello di incremento dei caratteri; quindi l'incremento dei caratteri è estremamente utile quando si lavora con fogli di lavoro Excel –

risposta

3

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

Questa può essere una caratteristica molto utile ..

Esempio

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

uscita

Found `baba` after 17,602 loops 

io non intendo rompere qualsiasi PIN o la password in qualunque momento presto comunque

0

dare un'occhiata alla sezione denominata "Operazioni aritmetiche di esempio n. 1 su variabili di carattere" a http://php.net/manual/en/language.operators.increment.php - È possibile utilizzare l'operatore di incremento per aggiungere caratteri e sequenze alla stringa.

+1

Questo non è ciò che viene chiesto. –

+0

Le mie scuse, speravo solo che facesse luce su alcuni usi di base della funzione. –

0

Un personaggio in realtà è un numero. Si dovrebbe dare un'occhiata alla tabella ASCII http://en.wikipedia.org/wiki/ASCII

numero Converst al charachter documentazione php http://php.net/manual/en/function.chr.php

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

Come si può vedere nella tabella ASCII la rappresentazione numerica di 'a' = 97 E 'b' = 98 Viene visualizzato 'b'

+2

Questo in realtà non spiega il ribaltamento. Cioè L'incremento di 'z' dà' aa'. – Jim

+0

Hai completamente ragione –

0

Scattato da the documentation, PHP segue la convenzione di Perl quando si occupa di operazioni aritmetiche su variabili di caratteri:

Ad esempio, in PHP e Perl $ a = 'Z'; $ A ++; trasforma $ a in 'AA', mentre in C a = 'Z'; a ++; trasforma in "[" (il valore ASCII di "Z" è 90, il valore ASCII di "[" è 91). Si noti che le variabili di carattere possono essere incrementate ma non decrementate e anche così sono supportati solo caratteri ASCII semplici (a-z e A-Z). L'incremento/decremento di altre variabili di caratteri non ha alcun effetto, la stringa originale è invariata.

Mentre personalmente non ho usato questa funzione, posso pensare ad alcuni vantaggi seguendo la convenzione di Perl, in contrapposizione a C's. Questo è l'incremento nell'intervallo alfa rispetto al semplice incremento del valore ASCII.

Rimanendo nell'intervallo alfa, in sostanza stiamo parlando di una base 26 numeral system (utilizzando lettere). Così come 9 incrementa a 10 (carry over), z incrementi a aa.

Quello che mi viene in mente immediatamente sono le sequenze di hash dei caratteri.

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

Mentre probabili tali semi sarebbero stati gestiti al di fuori di PHP, è comunque PHP vantaggioso fornisce nativamente ciò che altrimenti richiederebbe più codice.

Altri casi di utilizzo:

  • Base-26 in numeri sistema di rappresentazione
  • differenze di carattere Calcolo
  • crittografia