2013-06-28 23 views
5

Tôi đang học PHP lần đầu tiên và tôi thấy thật ngạc nhiên khi ngôn ngữ cho phép sử dụng toán tử tăng trên chuỗi.Khi nào sử dụng toán tử tăng giá trên chuỗi trong PHP?

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

Hướng dẫn tôi có thể tìm thấy quanh chủ đề này chỉ giới thiệu các ví dụ về đồ chơi. Tôi sẽ rất biết ơn nếu bạn đề cập đến một tình huống khi sử dụng 'tính năng' này có lợi.

Cảm ơn trước!

+1

Đó là một mánh lới quảng cáo, không phải là một tính năng. SO không thể trả lời "lý do" đằng sau thiết kế ngôn ngữ, ngoại trừ việc nó có [được chuyển từ Perl] (http://stackoverflow.com/questions/6458068/increment-and-decrement-strings-in-perl) – mario

+2

chỉ có thời gian tôi có thể nghĩ rằng nó là hữu ích sẽ là nếu một loạt các chuỗi đã được thử nghiệm như điều kiện. Thay vì viết một bài kiểm tra cho mỗi một, một vòng lặp for sẽ được sử dụng để kiểm tra từng cái một. – asimes

+0

ID cột MS Excel tăng từ 'A' đến 'Z', 'AA' thông qua 'AZ', 'BA' đến 'BZ', v.v ... khớp với mẫu tăng dần ký tự này; để tăng nhân vật là cực kỳ hữu ích khi làm việc với các trang tính Excel –

Trả lời

3

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

Đây có thể là một tính năng rất hữu ích .. .

Ví dụ

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

Output

Found `baba` after 17,602 loops 

Tôi không có ý định để crack bất kỳ mã PIN hoặc mật khẩu bất cứ lúc nào sớm anyway

0

hãy xem phần có tên "Ví dụ # 1 phép tính số học trên biến số" tại http://php.net/manual/en/language.operators.increment.php - Bạn có thể sử dụng toán tử tăng để thêm ký tự và chuỗi vào chuỗi.

+1

Đây không phải là những gì đang được hỏi. –

+0

Lời xin lỗi của tôi, tôi hy vọng điều này sẽ làm sáng tỏ một số cách sử dụng cơ bản của tính năng này. –

0

Một charachter là một số thực sự. Bạn nên có một cái nhìn vào bảng ASCII http://en.wikipedia.org/wiki/ASCII

số Converst để charachter tài liệu php http://php.net/manual/en/function.chr.php

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

Như bạn có thể thấy trong bảng ASCII đại diện số của 'a' = 97 Và tất 'b' = 98 Therefor 'b' được hiển thị

+2

Điều này không thực sự giải thích cho việc di chuyển. I E. Tăng 'z' cho' aa'. – Jim

+0

Bạn hoàn toàn đúng –

0

Lấy từ the documentation, PHP theo quy ước của Perl khi xử lý các phép tính số học trên các biến ký tự:

Ví dụ: bằng PHP và Perl $ a = 'Z'; $ a ++; biến $ a thành 'AA', trong khi trong C a = 'Z'; a ++; biến thành '[' (giá trị ASCII của 'Z' là 90, giá trị ASCII của '[' là 91). Lưu ý rằng các biến ký tự có thể được tăng lên nhưng không bị giảm đi và thậm chí chỉ có các ký tự ASCII thuần túy (a-z và A-Z) được hỗ trợ. Tăng/giảm các biến ký tự khác không có hiệu lực, chuỗi gốc không thay đổi.

Trong khi cá nhân tôi không sử dụng tính năng này, tôi có thể nghĩ ra một vài lợi ích bằng cách tuân theo quy ước của Perl, trái ngược với C. Đó là gia tăng trong phạm vi alpha thay vì đơn giản tăng giá trị ASCII.

Bằng cách ở trong phạm vi alpha, về cơ bản chúng ta đang nói về một cơ sở 26 numeral system (sử dụng chữ cái). Vì vậy, chỉ cần tăng 9 thành 10 (chuyển tiếp), z gia số thành aa.

Điều gì đến với tâm trí ngay lập tức sẽ là chuỗi ký tự băm.

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

Trong khi khả năng hạt như vậy sẽ được quản lý bên ngoài của PHP, đó là dù sao có lợi PHP cung cấp natively gì nếu không sẽ yêu cầu mã hơn.

trường hợp sử dụng khác:

  • Base-26 Numeral Hệ thống Đại diện
  • Tính Khác biệt kí tự
  • Encryption
Các vấn đề liên quan