2009-08-18 63 views
37

Tôi đang tạo một phương thức để mật khẩu của bạn cần ít nhất một lần chụp và một biểu tượng hoặc số. Tôi đã nghĩ đến việc tách chuỗi để mất ký tự và sau đó sử dụng preggmatch để đếm nếu nó chứa một vốn và biểu tượng/số.PHP: Tách một chuỗi vào một mảng foreach char

tuy nhiên tôi đã làm một cái gì đó như thế này trong kịch bản hành động nhưng không thể tìm ra cách này được gọi là trong php. tôi không thể tìm thấy một cách để đặt mỗi char của một từ trong một mảng.

dụ AS3

for(var i:uint = 0; i < thisWordCode.length -1 ; i++) 
{ 
    thisWordCodeVerdeeld[i] = thisWordCode.charAt(i); 
    //trace (thisWordCodeVerdeeld[i]); 
} 

Cảm ơn, Matthy

+2

Tại sao không sử dụng regex emidiately –

+0

http://php.net/manual/en/function.str-split.php – hakre

Trả lời

55

Bạn có thể truy cập vào ký tự trong chuỗi trong giống như cách bạn truy cập vào một chỉ mục mảng, ví dụ

$length = strlen($string); 
$thisWordCodeVerdeeld = array(); 
for ($i=0; $i<$length; $i++) { 
    $thisWordCodeVerdeeld[$i] = $string[$i]; 
} 

Bạn cũng có thể làm:

$thisWordCodeVerdeeld = str_split($string); 

Tuy nhiên bạn có thể tìm thấy nó dễ dàng hơn để xác nhận các chuỗi như là một chuỗi toàn bộ, ví dụ sử dụng cụm từ thông dụng.

+0

cảm ơn bạn đã sửa chữa lần cuối cùng awnser :) – matthy

+0

Tài liệu cho ký hiệu ngoặc vuông: http://php.net /manual/en/language.types.string.php#language.types.string.substr – Pang

+0

sử dụng isset thay vì strlen: 'for ($ i = 0; isset ($ string [$ i]); $ i ++) {' –

15

Bạn có thể truy cập vào một chuỗi sử dụng [], như bạn làm cho các mảng:

$stringLength = strlen($str); 
for ($i = 0; $i < $stringLength; $i++) 
    $char = $str[$i]; 
+1

điều này không hoạt động chính xác cho chuỗi nhiều byte như: 'éléphant'. http://stackoverflow.com/questions/3666306/how-to-iterate-utf-8-string-in-php –

40

bạn có thể chuyển đổi một chuỗi để mảng với str_split và sử dụng foreach

$chars = str_split($str); 
foreach($chars as $char){ 
    // your code 
} 
+2

IMHO đây là cách tốt nhất. Nó có thể không phải là nhanh nhất, nhưng đối với hầu hết các ứng dụng nó không quan trọng, ở tất cả. Trong ứng dụng của chúng tôi, sự khác biệt về tốc độ thậm chí không thể đo lường được. (Vs for-loop.) –

+1

giải pháp sạch nhất, nhờ – Daniel

+1

Cũng đồng ý rằng đây là câu trả lời tốt hơn, vì nó trả lời trực tiếp câu hỏi –

5

Kể từ str_split() chức năng không multibyte an toàn, một giải pháp dễ dàng để chia UTF-8 chuỗi mã hóa là sử dụng preg_split() với u (PCRE_UTF8) modifier.

preg_split('//u', $str, null, PREG_SPLIT_NO_EMPTY) 
1

Giải pháp ít có thể đọc, nhưng hiệu quả hơn khi lặp qua nhiều chuỗi, có thể đang sử dụng isset để kiểm tra phần cuối của chuỗi. Điều này có thể thực hiện tốt hơn vì isset là một cấu trúc ngôn ngữ và strlen là một chức năng:

for ($i = 0; isset($value[$i]); $i++) { 
    "do something here" 
} 

This question nên cung cấp nền hơn.

Các vấn đề liên quan