我喜欢简单优雅的代码,这感觉就像。第一个解决方案是粗略的。功能性和可能合理的性能但粗略。第二种是更优雅,但对于应该如此简单的东西来说似乎有些过分。
$recurring
是一个包含大约20个项目的数组。我必须将这7个值(一周中的几天)映射到单个字段。使用new_days = implode(',', $days);
完成这两个项目或以数组形式使用它们,具体取决于调用此函数的位置。
$days = array();
if ($recurring['m'])
{
$days[] = 1;
}
if ($recurring['t'])
{
$days[] = 2;
}
if ($recurring['w'])
{
$days[] = 3;
}
if ($recurring['h'])
{
$days[] = 4;
}
if ($recurring['f'])
{
$days[] = 5;
}
if ($recurring['s'])
{
$days[] = 6;
}
if ($recurring['u'])
{
$days[] = 7;
}
$map = array(
'm' => 1,
't' => 2,
'w' => 3,
'h' => 4,
'f' => 5,
's' => 6,
'u' => 7,
);
$days = array();
foreach ($map as $offset => $value)
{
if ($recurring[$offset])
{
$days[] = $value;
}
}
数组看起来像这样:
$recurring = array(
'id' => 27,
'end_date' => '12-27-2005',
'frequency' => 'W',
'm' => 1,
't' => 0,
'w' => 1,
'h' => 0
'f' => 1,
's' => 0,
'u' => 0,
);
使用其他可选参数。
答案 0 :(得分:0)
您可以尝试使用switch语句并循环显示它们。
foreach($recurring as $key => $value){
switch($key){
case 'm':
$days[] = 1;
break;
case 't':
$days[] = 2;
break;
case 'w':
$days[] = 3;
break;
case 't':
$days[] = 4;
break;
case 'f':
$days[] = 5;
break;
case 's':
$days[] = 6;
break;
case 's':
$days[] = 7;
break;
}
}
for try 2:
foreach($recurring as $key => $value){
switch($key){
case 'm':
$days[] = $value;
break;
case 't':
$days[] = $value;
break;
case 'w':
$days[] = $value;
break;
case 't':
$days[] = $value;
break;
case 'f':
$days[] = $value;
break;
case 's':
$days[] = $value;
break;
case 's':
$days[] = $value;
break;
}
}
希望它有所帮助,祝你好运
答案 1 :(得分:0)
还有更好的主意吗?
这是否更好取决于口味,但至少有所不同:
$recurring = array(
'id' => 27,
'end_date' => '12-27-2005',
'frequency' => 'W',
'm' => 1,
't' => 0,
'w' => 1,
'h' => 0,
'f' => 1,
's' => 0,
'u' => 0
);
$days = $recurring;
array_splice($days, 0, 3, 0); # replace leading 3 elements by one element 0
$days = array_keys(array_filter(array_values($days)));
它将给定数组简化为天的元素(加上前导0
,以将所需的天从1开始编号),将键更改为索引,过滤元素以保留1
s,然后获取剩余的索引,即所需的天数。