Ben*_*ier 1 php string parsing
我想在php中进行以下转换:
from: "0110001" to: "Tuesdays, Wednesdays, Sundays".
Run Code Online (Sandbox Code Playgroud)
这样做的加分点:
from: "0110001" to: "Tuesdays, Wednesdays and Sundays".
Run Code Online (Sandbox Code Playgroud)
输入为七个字符,每个字符代表一周中的某一天.
如果没有foreach循环,我怎么能这样做?我想使用array_walk或array_reduce.
工作解决方案,但有一个foreach:
<?php
function parseDays($str) {
$days = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
$result = array();
foreach (str_split($str) as $k=>$v) {
if ($v == '1') {
$result[] = $days[$k];
}
}
return join(', ', $result);
}
echo parseDays("0110001");
Run Code Online (Sandbox Code Playgroud)
您可以使用内置函数执行第一个版本:
$daynames = array(
'Mondays', 'Tuesdays', // etc
);
$in = "0110001";
echo implode(', ', array_intersect_key($daynames, array_filter(str_split($in))));
Run Code Online (Sandbox Code Playgroud)
这是如何工作的:
$daynames
.array_filter
保留了钥匙.array_intersect_key
将键映射到内部值$daynames
.implode
做一个逗号分隔的上述清单.如果你想将最后一个逗号转换为"and"
,最简洁的方式是正则表达式(我个人觉得这个解决方案有问题,虽然它无可否认有效):
echo preg_replace('/,(?=[^,]+$)/', ' and', implode(...));
Run Code Online (Sandbox Code Playgroud)
请不要忘记,最好的代码是不存在的代码(保证零错误!),其次是你闭着眼睛理解的代码.
上述一定的代码并没有落入任一那些类别; 我的专业建议是使用,foreach
如果这会产生任何人都熟悉的代码.
归档时间: |
|
查看次数: |
100 次 |
最近记录: |