php 将管道分隔的字符串解析为2、3、4或5个变量(取决于输入字符串)

dwbf0jvd  于 2023-04-28  发布在  PHP
关注(0)|答案(4)|浏览(108)

我的代码中有这样一行:

list($user_id, $name, $limit, $remaining, $reset) = explode('|', $user);

最后3个参数可能存在,也可能不存在。是否有类似于list的函数,如果数组比预期的小,它会自动忽略最后的参数?
如果输入字符串中缺少任何尾随的可选子字符串,则应向相应的变量分配null值。

s1ag04yj

s1ag04yj1#

list($user_id, $name, $limit, $remaining, $reset)
    = array_pad(explode('|', $user), 5, null);
pbossiut

pbossiut2#

如果您担心SDC的解决方案感觉“黑客”;然后你可以设置一些默认值并用途:

$user = '3|username';

$defaults = array(NULL, NULL, 10, 5, FALSE);
list($user_id, $name, $limit, $remaining, $reset) = explode('|', $user) + $defaults;

var_dump($user_id, $name, $limit, $remaining, $reset);
yhqotfr8

yhqotfr83#

只需在字符串的末尾添加一些备用管道:

list($user_id, $name, $limit, $remaining, $reset) = explode('|', $user.'||||');

问题解决了。
注意:如果你要加载任意管道分隔的数据,你可能需要使用str_getcsv()函数而不是explode()

cclgggtu

cclgggtu4#

sscanf()可以做list() + explode()(和array_pad())可以做的事情,除了它是一个单一的函数调用,并且它可以允许特定类型的子字符串转换。
代码:(Demo with unit tests

sscanf($test, '%d|%[^|]|%d|%d|%d', $user_id, $name, $limit, $remaining, $reset);

我发现这是一个上级的方法在各方面都比现有的建议的解决方案。

相关问题