【问题标题】:PHP - Explode list variables to arrayPHP - 将列表变量分解为数组
【发布时间】:2014-03-16 00:51:53
【问题描述】:

我对爆炸功能有一个小问题。我有一个这样的字符串:

$response:"online,ksksuems,3428939,670605083faeb7750e1afc1010f0f66f8ef0025a,File1.zip
offline,iwksksiw,,, offline,kdlsiwie,,, offline,jdmsmwus,,,
online,uekseks,4023702,37d97c816afdfb10857057d870e74e8774e2bf8a,File2.zip
online,jwksjwa,8860421,20b5e3154653f24963d005cd873917d3cc0a0fe2,File3.rar
online,jsusneus,4912753,9489a47bac4d2a4f7f6810cb37f60924ef48fc48,File4.rar
online,udjdjsis,1177526,5d1da2a1aebae206908ef6d88105f5272ab423e0,File5.zip"

现在我想使用爆炸功能:

list($fileStatus, $fileId, $fileSize, $fileSha1, $fileName) = explode(",", $response);

但如果我打印 $fileStatus 的内容,我只会得到 1 个响应。我现在的问题是,如何为每个变量获取一个数组?所以我有"array(ksksuems => online, iwksksiw => offline);"

【问题讨论】:

  • 您有语法错误。你的意思是$response=?您的数据真的是行分离的吗?为什么不在用逗号分隔之前读取每一行(或拆分行)?

标签: php arrays list explode


【解决方案1】:

这应该可以 -

$arr = Array();
$lines = explode("\r\n", $response);

//print the exploded lines here.
var_dump($lines);
/*
    Expected output -
    array
      0 => string 'online,ksksuems,3428939,670605083faeb7750e1afc1010f0f66f8ef0025a,File1.zip' (length=74)
      1 => string 'offline,iwksksiw,,, offline,kdlsiwie,,, offline,jdmsmwus,,,' (length=59)
      2 => string 'online,uekseks,4023702,37d97c816afdfb10857057d870e74e8774e2bf8a,File2.zip' (length=73)
      3 => string 'online,jwksjwa,8860421,20b5e3154653f24963d005cd873917d3cc0a0fe2,File3.rar' (length=73)
      4 => string 'online,jsusneus,4912753,9489a47bac4d2a4f7f6810cb37f60924ef48fc48,File4.rar' (length=74)
      5 => string 'online,udjdjsis,1177526,5d1da2a1aebae206908ef6d88105f5272ab423e0,File5.zip' (length=74)
*/


foreach($lines as $line){
    list($fileStatus, $fileId, $fileSize, $fileSha1, $fileName) = explode(",", $line);
    $arr[$fileId] = $fileStatus;
}
var_dump($arr);
/*
    OUTPUT-
    array
      'ksksuems' => string 'online' (length=6)
      'iwksksiw' => string 'offline' (length=7)
      'uekseks' => string 'online' (length=6)
      'jwksjwa' => string 'online' (length=6)
      'jsusneus' => string 'online' (length=6)
      'udjdjsis' => string 'online' (length=6)
*/

【讨论】:

  • 谢谢,这似乎是一个很好的解决方案,但如果我尝试它,它只会给我第一行:array(1) { 'ksksuems' => string(6) "online" }
  • 哦...这似乎对我有用。即使在这里它也在工作 - codepad.org/QfTKGcGl
  • ...这很奇怪,如果我复制你的代码,我会在浏览器中看到这个:(modplace.de/mp-php/explode.php)
  • 嗯...尝试在explode语句之后回显代码。我认为 $response 变量中的内容不同。
  • 现在我在第一个explode 语句之后回显了$response 变量。
【解决方案2】:

您需要在响应中使用explode() 将各个响应放入一个数组中,然后循环遍历它以获取彼此的值。

假设\n的换行符作为分隔符:

$responses = explode("\n", $response);
foreach ($responses as $resp) {
    list($fileStatus, $fileId, $fileSize, $fileSha1, $fileName) = explode(",", $resp);
    // do stuff
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2012-05-09
    相关资源
    最近更新 更多