如何通过爆炸只获取一些特定数据?

时间:2015-09-15 12:50:54

标签: php explode

在我的下面的代码中,我可以爆炸并获取我的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()返回的前三项。

3 个答案:

答案 0 :(得分:4)

只需向list()添加一个逗号即可忽略其余值:

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

Demo

或者,如果值位于数组中的特定位置:

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

Demo

空占位符“跳过”这些值,它们永远不会分配给变量。

答案 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);