【问题标题】:How can i take only some specific data by explode?我怎样才能通过爆炸只获取一些特定的数据?
【发布时间】:2015-09-15 12:50:53
【问题描述】:

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

【问题讨论】:

    标签: php explode


    【解决方案1】:

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

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

    Demo

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

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

    Demo

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

    【讨论】:

    • 返回的数据不按顺序怎么办?我的意思是(需要数据)(不需要数据)(需要数据)(不需要数据)?我怎么能忽略它们?
    • 只要在你不想要值的地方留下空格。我会相应地更新我的答案。
    • @b0s3 正确。感谢您对这一疏忽的提醒。
    • 你测试了吗?不起作用$buf = "hello world stackoverflow bug"; list($imei,$lat,$lon,) = explode(' ', $buf, 3); print $imei . "\n"; print $lat . "\n"; print $lon . "\n"; 输出 hello world stackoverflow bug 但他不想要bug
    • 是的,经过测试并确认工作正常。链接到我的答案中的演示。
    【解决方案2】:

    作为@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 的每个后续调用只需要使用令牌,因为它 跟踪它在当前字符串中的位置。重新开始,或 标记一个新字符串,您只需使用字符串参数调用 strtok 再次初始化它。请注意,您可以在 token 参数中放置多个标记。当找到参数中的任何一个字符时,字符串将被标记化。

    【讨论】:

      【解决方案3】:

      其实你不需要做任何事情。如果展开后的数组中有多余的元素,list 不会在意。

      见:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-26
        • 2021-12-25
        • 2015-12-02
        • 2015-06-13
        • 1970-01-01
        • 1970-01-01
        • 2019-01-12
        • 2018-03-02
        相关资源
        最近更新 更多