2010-07-15 43 views
9

Các toán tử so sánh < <= > >= cũng có thể được áp dụng cho chuỗi. Vậy tại sao chúng ta cần chức năng đặc biệt để so sánh chuỗi: strcmp?PHP: Tại sao chúng ta cần hàm so sánh chuỗi?

+2

Tôi có thể đoán rằng bạn có thể cung cấp bộ so sánh hoặc ngôn ngữ riêng cho hàm đó ... nhưng không, nó chỉ là hàm C cũ của thư viện C, mặc dù an toàn nhị phân. Vì vậy, có thể để dễ dàng chuyển mã C sang PHP ... vì điều đó dường như xảy ra mọi lúc. – Joey

Trả lời

13

Bởi vì có rất nhiều biến thể:

Tùy thuộc vào chức năng, câu trả lời cho những câu hỏi khác nhau:

Additionaly, các toán tử so sánh cũng cho true hoặc false. strcmp cung cấp số nguyên để mã hóa đồng thời cho dù có nhận dạng (trả về 0) hay, nếu không, số này lớn hơn (tùy thuộc vào giá trị dương hay âm).

+0

Có sự khác biệt nào đối với '===' không? –

+0

Nếu cả hai toán hạng là chuỗi, và trong trường hợp cụ thể của 'strcmp', tôi không nghĩ có sự khác biệt, không. – Artefacto

+0

@Peka Yeah, cả hai đều dựa vào memcmp. Chỉ có sự khác biệt một trả về true/false, một số nguyên khác. – Artefacto

3

Mặc dù không có quá tải trong PHP cho strcmp, kết quả strcmp trong 3 giá trị khác nhau -1 cho nhỏ hơn 0 cho bằng và +1 lớn hơn chuỗi so sánh. Với < = <= > >= bạn sẽ có (đôi khi) để làm nhiều lần kiểm tra cái khác.

+1

Nó không chỉ trả lại -1, 1 và 0. – Artefacto

+0

Và trừ khi bạn thực hiện một số loại tra cứu bảng bạn sẽ kết thúc với một trường hợp xấu nhất hai so sánh là tốt. – Artefacto

+0

Erm, 'strcmp' được sử dụng theo cách khá giống nhau, ngoại trừ việc bạn dùng toán tử so sánh và áp dụng nó cho' 0'. Vì vậy, '$ a <$ b' trở thành' strcmp ($ a, $ b) <0' - tương tự với '==', '<=', '>' và '> ='. – Joey

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