2015-09-15 14 views
5

Trong đoạn mã sau, tôi có thể phát nổ và lấy 3 thành phần của tôi imei, lat, lon vì phản hồi chỉ trả về 3 dữ liệu được phân cách bởi ' '.Làm cách nào tôi có thể chỉ lấy một số dữ liệu cụ thể bằng cách phát nổ?

$r = socket_recvfrom($sock, $buf, 512, 0, $remote_ip, $remote_port); 
    echo "$remote_ip : $remote_port -- " . $buf; 

    list($imei,$lat,$lon) = explode(' ', $buf, 3); 

Nhưng nếu phản hồi gửi cho tôi nhiều dữ liệu cách nhau bởi ' ' nhưng tôi vẫn chỉ cần 3 yếu tố. Tôi không cần dữ liệu còn lại. Làm thế nào tôi có thể phát nổ như thế?

Dữ liệu sẽ không là ba mục đầu tiên được trả lại bởi explode().

Trả lời

4

Chỉ cần thêm một dấu phẩy để list() để bỏ qua các giá trị còn lại:

list($imei,$lat,$lon,) = explode(' ', $buf); 

Demo

Hoặc, nếu các giá trị là ở những nơi cụ thể trong mảng của bạn:

list($imei, , $lat, , $lon,) = explode(' ', $buf); 

Demo

Các phần giữ chỗ trống "bỏ qua" các giá trị đó và chúng không bao giờ được gán cho một biến.

+0

nếu dữ liệu trả về không theo thứ tự thì sao? Tôi có nghĩa là (dữ liệu cần thiết) (không cần dữ liệu) (dữ liệu cần thiết) (không cần dữ liệu)? Làm thế nào tôi có thể bỏ qua chúng? – hhs

+0

Chỉ cần để trống khoảng trắng nơi bạn không muốn giá trị. Tôi sẽ cập nhật câu trả lời của tôi cho phù hợp. –

+0

Bạn cũng cần cập nhật bù đắp 'giới hạn'. –

-1

Thực ra bạn không cần phải làm gì cả. Nếu có các phần tử phụ trong mảng đã phát nổ, danh sách sẽ không quan tâm.

Xem:

$string = "a b c d e f"; 
list($a,$b,$c) = explode(' ',$string); 
0

Là một phần mở rộng @ câu trả lời của John, còn có một chức năng php strtok() đó là hữu ích trong các loại kịch bản

$imei = strtok($buf, ' '); 
$lat = strtok(' '); 
$lon = strtok(' '); 

Bây giờ, giả sử nếu chuỗi bạn

$buf = 'test1 test2 test3 test4 test5'; 

$imei, $lat, $lon sẽ được,

string 'test1' (length=5) 
string 'test2' (length=5) 
string 'test3' (length=5) 

Từ php.net tay trang,

Lưu ý rằng chỉ có cuộc gọi đầu tiên để strtok sử dụng đối số chuỗi. Mọi cuộc gọi tiếp theo để strtok chỉ cần mã thông báo để sử dụng, vì nó theo dõi vị trí của chuỗi hiện tại. Để bắt đầu lại, hoặc để mã hóa một chuỗi mới, bạn chỉ cần gọi strtok với đối số chuỗi một lần nữa để khởi tạo nó. Lưu ý rằng bạn có thể đặt nhiều mã thông báo trong thông số mã thông báo. Chuỗi sẽ được mã hóa khi bất kỳ một trong các ký tự trong đối số được tìm thấy.

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