[英]Is there a more compact and elegant way to write this code?
我喜歡簡單而優雅的代碼,但是感覺卻不一樣。 第一個解決方案是總的。 機能性強,可能表現合理但總體而言。 第二個比較優雅,但是對於應該這么簡單的東西似乎有點過分了。
$recurring
是大約20個項目的數組。 我必須將這7個值(星期幾)映射到單個字段。 用new_days = implode(',', $days);
完成這兩項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,
);
帶有其他可選參數。
您可以嘗試使用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;
}
}
對於嘗試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;
}
}
希望對您有幫助,祝您好運
還有更好的主意嗎?
這是否更好取決於口味,但至少有所不同:
$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,然后獲取其余的索引,即想要的天數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.