2011-06-24 23 views
11

Một chuỗi là một mảng các ký tự, đúng không? Nếu vậy, thì tại sao count() không tạo ra kết quả tương tự như strlen() trên một chuỗi?PHP - tại sao không đếm() làm việc như strlen() trên một chuỗi?

+15

PHP không phải lúc nào cũng có ý nghĩa như bạn muốn ;-) –

+0

@Matt Ellen cũng tương tự đối với bất kỳ lang, wh y không biết tại sao có các chức năng khác nhau cho các nhiệm vụ khác nhau? – Raoul

+0

@Raoul: giống nhau? Các loại khác nhau có các chức năng khác nhau áp dụng cho chúng? Chắc chắn, nhưng trong một số ngôn ngữ danh sách/mảng của các ký tự và danh sách/mảng của bất cứ điều gì khác có thể được đối xử như nhau. –

Trả lời

15

Chuỗi là một mảng các ký tự trong C, C++ và Java. Trong PHP, nó không phải là. Hãy nhớ rằng PHP là một ngôn ngữ rất lỏng lẻo, bạn có thể probobly có được một nhân vật từ một chuỗi PHP với [] -selector, nhưng nó vẫn không làm cho nó trở thành một mảng.

+0

Tôi ghét nó khi ngôn ngữ làm điều đó. Khi tôi thấy ký hiệu mảng, tôi tự động nghĩ rằng tôi đang làm việc với một mảng thực. Nó không giúp đỡ rằng hướng dẫn sử dụng PHP không rõ ràng nói "Chuỗi KHÔNG PHẢI mảng, mặc dù có một chỉ mục." –

+0

Có rất ít ngôn ngữ trong đó một chuỗi giống với một mảng. Có lẽ trong C, nhưng bất kỳ ngôn ngữ lập trình bậc cao hơn sẽ có một cấu trúc đặc biệt cho chuỗi. Tương tự như vậy, trong C++, std :: string có thể được truy cập như một mảng, nhưng 'sizeof (std :: string)' sẽ không cung cấp cho bạn chiều dài. Chỉ cần sử dụng đúng công cụ cho đúng công việc. –

3

count() đếm số lượng mục nhập trong một Array.

$test = array(1,2,3); 
echo count($test); 

Output: 3

Tại sao bạn sẽ muốn sử dụng count() trên string khi strlen() có thể làm điều đó? Bạn không chắc liệu đầu vào của mình có phải là string hoặc array không? Sau đó sử dụng is_array() để kiểm tra điều đó.

+1

Vâng, tôi biết. Và nếu một chuỗi là một mảng các ký tự, thì count() sẽ trả về số ký tự trong chuỗi đó. –

+0

Bạn có thể gọi một chuỗi các ký tự bằng tiếng Anh có thể, nhưng trong PHP nó không phải là một mảng các ký tự, nó là một chuỗi. – Kokos

+1

Kokos, câu hỏi đặt ra là tại sao chuỗi không được xử lý giống như các mảng bình thường khi chúng có thể, trong PHP. Ví dụ, Haskell coi chuỗi là danh sách các ký tự, vì vậy bạn có thể sử dụng tất cả các hàm danh sách của Haskell trên chuỗi. –

0

số đếm được số phần tử trong một mảng, srtlen nhận được độ dài của một chuỗi. Đây là trong các tài liệu:

http://php.net/manual/en/function.strlen.php

+0

Vâng, tôi biết. Tôi đã hỏi TẠI SAO như vậy. –

+0

@ kevinmajor1 một lần nữa, điều này được đề cập trong tài liệu, nếu bạn đọc chúng. – Raoul

+0

Tôi đã đọc tài liệu. Họ chỉ không rõ ràng về vấn đề như tôi đã hy vọng. Xem nhận xét của tôi ở trên cho lý do tại sao tôi ngay lập tức nghĩ rằng chuỗi được, thực sự, mảng ký tự. –

19

Trừ khi nó là một đối tượng, count phôi đối số của nó để một mảng, và

count((array) "example") 
= count(array("example")) 
= 1 
+0

Câu trả lời hay! – CoR

+0

Câu trả lời này tốt hơn câu trả lời "không phải là một mảng" được chấp nhận và là câu trả lời đúng. – person27

0

đếm là dùng preferabaly hơn cho đếm giá trị mảng strlen tính của nó chỉ số không có char trong str .....

1

Cách chính xác chuỗi đang được xử lý nội bộ bằng ngôn ngữ lập trình cụ thể, không nhất thiết có nghĩa là bạn có thể xử lý nó như nhau đối với các loại dữ liệu "có liên quan". Những gì bạn mô tả có thể được có thể trong đồng bằng C. Tuy nhiên PHP không phải là C và do đó không theo các đặc điểm tương tự.

1

Chuỗi chỉ là một loạt các charactes, và count chỉ đếm số phần tử trong một mảng.

sử dụng $ string [$ index]; nó chỉ là một shortcut kinda điều để giúp bạn tìm nhân vật thứ N,

bạn có thể sử dụng count(explode('',$string)); mà có lẽ là những gì strlen không

nên bài học cho ngày hôm nay là

count == mảng chiều dài

strlen == chiều dài chuỗi

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