在我的下面的代码中,我可以爆炸并获取我的3个元素imei,lat,lon,因为响应仅返回由' '
分隔的3个数据。
$r = socket_recvfrom($sock, $buf, 512, 0, $remote_ip, $remote_port);
echo "$remote_ip : $remote_port -- " . $buf;
list($imei,$lat,$lon) = explode(' ', $buf, 3);
但是,如果响应向我发送了大量由' '
分隔的数据,但仍然只需要3个元素。我不需要其他数据。我怎么能这样爆炸?
数据不会是explode()
返回的前三项。
答案 0 :(得分:4)
只需向list()
添加一个逗号即可忽略其余值:
list($imei,$lat,$lon,) = explode(' ', $buf);
或者,如果值位于数组中的特定位置:
list($imei, , $lat, , $lon,) = explode(' ', $buf);
空占位符“跳过”这些值,它们永远不会分配给变量。
答案 1 :(得分:0)
作为@John答案的扩展,还有另一个php函数strtok()
在这种场景中很有用
$imei = strtok($buf, ' ');
$lat = strtok(' ');
$lon = strtok(' ');
现在,假设您的字符串
$buf = 'test1 test2 test3 test4 test5';
$imei
,$lat
,$lon
将是,
string 'test1' (length=5)
string 'test2' (length=5)
string 'test3' (length=5)
来自php.net手册页,
请注意,只有第一次调用strtok才会使用字符串参数。 每次对strtok的后续调用都只需要使用令牌,因为它 跟踪当前字符串中的位置。重新开始,或者 tokenize一个新的字符串,你只需用字符串参数调用strtok 再次初始化它。请注意,您可以在token参数中放置多个令牌。当找到参数中的任何一个字符时,该字符串将被标记化。
答案 2 :(得分:-1)
实际上你不需要做任何事情。如果爆炸数组中有额外的元素,则列表不会受到关注。
请参阅:
$string = "a b c d e f";
list($a,$b,$c) = explode(' ',$string);