strlen
trả về số byte trong chuỗi chứ không phải độ dài ký tự. Xem Hướng dẫn sử dụng PHP here.
Nhìn kỹ vào:
Lưu ý:
strlen() trả về số byte chứ không phải là số ký tự trong một chuỗi.
Nếu bạn lấy kết quả và bội số của 8, bạn có thể nhận bit.
Đây là một chức năng có thể dễ dàng thực hiện phép tính cho bạn.
function strbits($string){
return (strlen($string)*8);
}
Note, nếu bạn sử dụng, memory_get_usage()
, bạn sẽ có giá trị sai trả lại. Bộ nhớ nhận được mức sử dụng là lượng bộ nhớ được phân bổ bởi tập lệnh PHP. Điều này có nghĩa, trong bộ phân tích cú pháp của nó, nó phân bổ bộ nhớ cho chuỗi và giá trị của chuỗi. Kết quả là, giá trị của điều này trước và sau khi thiết lập một var, sẽ cao hơn mong đợi.
Ví dụ, chuỗi: Hello, this is just test message
, sản xuất các giá trị sau:
Memory (non-real): 344 bytes
Strlen: 32 Bytes
Strlen * 8bits: 256 bits
Đây là mã:
<?php
$mem1 = memory_get_usage();
$a = 'Hello, this is just test message';
echo "Memory (non-real): ". (memory_get_usage() - $mem1)."\n";
echo "Strlen: ". strlen($a)."\n";
echo "Strlen * 8bits: ". (strlen($a) * 8),"\n";
Nguồn
2012-07-06 17:30:44
Giải pháp tốt hơn tôi. –
Đây là một chút tắt. 'memory_get_usage() trả về số lượng bộ nhớ, tính bằng byte, hiện đang được cấp phát cho tập lệnh PHP của bạn. 'Bộ nhớ của bạn được cấp phát bộ nhớ để đặt biến' $ foo' cũng như bộ nhớ để đặt biến '$ foo' thành một chuỗi và nối thêm một giá trị. Kết quả cao hơn số bit/byte thực tế của chuỗi. –
thì tại sao nó luôn trả về 272 cả khi tôi sử dụng '" Một số biến "' như chuỗi hoặc '" Một số biến Một số biến Một số biến "' (nhiều lần)? Ngay cả khi tôi gán chuỗi rỗng nó vẫn hiển thị 272. Có vẻ như phương pháp này là không chính xác – vladkras