我的代码中有这样一行:
list($user_id, $name, $limit, $remaining, $reset) = explode('|', $user);
最后3个参数可能存在,也可能不存在。是否有类似于list的函数,如果数组比预期的小,它会自动忽略最后的参数?如果输入字符串中缺少任何尾随的可选子字符串,则应向相应的变量分配null值。
null
s1ag04yj1#
list($user_id, $name, $limit, $remaining, $reset) = array_pad(explode('|', $user), 5, null);
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);
yhqotfr83#
只需在字符串的末尾添加一些备用管道:
list($user_id, $name, $limit, $remaining, $reset) = explode('|', $user.'||||');
问题解决了。注意:如果你要加载任意管道分隔的数据,你可能需要使用str_getcsv()函数而不是explode()。
str_getcsv()
explode()
cclgggtu4#
sscanf()可以做list() + explode()(和array_pad())可以做的事情,除了它是一个单一的函数调用,并且它可以允许特定类型的子字符串转换。代码:(Demo with unit tests)
sscanf()
list()
array_pad()
sscanf($test, '%d|%[^|]|%d|%d|%d', $user_id, $name, $limit, $remaining, $reset);
我发现这是一个上级的方法在各方面都比现有的建议的解决方案。
4条答案
按热度按时间s1ag04yj1#
pbossiut2#
如果您担心SDC的解决方案感觉“黑客”;然后你可以设置一些默认值并用途:
yhqotfr83#
只需在字符串的末尾添加一些备用管道:
问题解决了。
注意:如果你要加载任意管道分隔的数据,你可能需要使用
str_getcsv()
函数而不是explode()
。cclgggtu4#
sscanf()
可以做list()
+explode()
(和array_pad()
)可以做的事情,除了它是一个单一的函数调用,并且它可以允许特定类型的子字符串转换。代码:(Demo with unit tests)
我发现这是一个上级的方法在各方面都比现有的建议的解决方案。