方法getQuoteHTML使用从getQuoteParams方法返回的数组生成HTML。它们是大型类UpdateStocks的方法。
如果可能的话,你能不能帮助我用更快、更容易或更有效的方法来代替它们?
/**
*
* @return a large HTML string of current quote section
*/
public static function getQuoteHTML($a){
$i=UpdateStocks::getQuoteParams();
$bt=' Quote: '.date('l, d F Y \⏱ H:i T',microtime(true)).'';
$hs='';
foreach($i as $k=>$p){
$h='';
if(isset($p["id"])&&!empty($a[$p["ky"]])){
if(preg_match('/(^s-*)/i',$p["id"])==1){
$r=rand(20,99);
$h=$h.'';
$h=$h.''.$p["lb"].': ';
$h=$h.''.$a[$p["ky"]].'';
$h=$h.'';
$hs=$hs.$h;
}elseif(preg_match('/(^d-*)/i',$p["id"])==1){
$r=rand(20,99);
$h=$h.'';
$h=$h.''.$p["lb"].': ';
$h=$h.''.money_format('%=9.4n',(double)$a[$p["ky"]]).'';
$h=$h.'';
$hs=$hs.$h;
}elseif(preg_match('/(^v-*)/i',$p["id"])==1){
$r=rand(20,99);
$h=$h.'';
$h=$h.''.$p["lb"].': ';
$h=$h.''.money_format('%=*!#4.0n',(double)$a[$p["ky"]]).'';
$h=$h.'';
$hs=$hs.$h;
}elseif(preg_match('/(^t-*)/i',$p["id"])==1){
$r=rand(20,99);
$h=$h.'';
$h=$h.''.$p["lb"].': ';
$h=$h.''.date('l, d F Y \⏱ H:i T \(P \U\T\C\)',(double)$a[$p["ky"]]/1000).'';
$h=$h.'';
$hs=$hs.$h;
}elseif(preg_match('/(^p-*)/i',$p["id"])==1){
$r=rand(20,99);
$h=$h.'';
$h=$h.''.$p["lb"].': ';
$h=$h.''.money_format('%=*!#4.4n',(double)$a[$p["ky"]]).'%';
$h=$h.'';
$hs=$hs.$h;
}else{
$r=rand(20,99);
$h=$h.'';
$h=$h.''.$p["lb"].': ';
$h=$h.''.$a[$p["ky"]].'%';
$h=$h.'';
$hs=$hs.$h;
}
} // isset
$h='';
}
return ''.$bt.''.$hs.'';
}除了ky之外,还可以更改$params数组,并且可以将附加的键/值添加到:
/**
*
* @return an array of parameters for stock quote from version 1 API at iextrading
*/
public static function getQuoteParams(){
$params=array(
array(
"id"=>"s-sy",
"ky"=>"symbol",
"lb"=>"Symbol",
),
array(
"id"=>"s-cn",
"ky"=>"companyName",
"lb"=>"Company",
),
array(
"id"=>"s-mk",
"ky"=>"primaryExchange",
"lb"=>"Primary Exchange Market",
),
array(
"id"=>"s-st",
"ky"=>"sector",
"lb"=>"Market Sector",
),
array(
"id"=>"d-op",
"ky"=>"open",
"lb"=>"Open Share Price [$]",
),
array(
"id"=>"t-ot",
"ky"=>"openTime",
"lb"=>"Open Time",
),
array(
"id"=>"d-cl",
"ky"=>"close",
"lb"=>"Close Share Price [$]",
),
array(
"id"=>"t-ct",
"ky"=>"closeTime",
"lb"=>"Close Time",
),
array(
"id"=>"d-hi",
"ky"=>"high",
"lb"=>"Current High Share Price [$]",
),
array(
"id"=>"d-lo",
"ky"=>"low",
"lb"=>"Current Low Share Price [$]",
),
array(
"id"=>"d-lp",
"ky"=>"latestPrice",
"lb"=>"Current Latest Share Price [$]",
),
array(
"id"=>"s-ls",
"ky"=>"latestSource",
"lb"=>"Data Source",
),
array(
"id"=>"t-lu",
"ky"=>"latestUpdate",
"lb"=>"Current Latest Update",
),
array(
"id"=>"v-lv",
"ky"=>"latestVolume",
"lb"=>"Current Latest Volume [V]",
),
array(
"id"=>"d-rp",
"ky"=>"iexRealtimePrice",
"lb"=>"Source Near-Real-Time Share Price [$]",
),
array(
"id"=>"v-rs",
"ky"=>"iexRealtimeSize",
"lb"=>"Source Near-Real-Time Size [V]",
),
array(
"id"=>"t-iu",
"ky"=>"iexLastUpdated",
"lb"=>"Source Latest Update",
),
array(
"id"=>"d-dp",
"ky"=>"delayedPrice",
"lb"=>"Delayed Share Price [$]",
),
array(
"id"=>"t-dt",
"ky"=>"delayedPriceTime",
"lb"=>"Delayed Share Price Time",
),
array(
"id"=>"d-ep",
"ky"=>"extendedPrice",
"lb"=>"Extended Share Price [$]",
),
array(
"id"=>"d-ec",
"ky"=>"extendedChange",
"lb"=>"Extended Dollar Change [$]",
),
array(
"id"=>"p-cp",
"ky"=>"extendedChangePercent",
"lb"=>"Extended Percent Change [%]",
),
array(
"id"=>"t-et",
"ky"=>"extendedPriceTime",
"lb"=>"Extended Share Price Time",
),
array(
"id"=>"d-pc",
"ky"=>"previousClose",
"lb"=>"Close Share Price in Previous Session [$]",
),
array(
"id"=>"d-ch",
"ky"=>"change",
"lb"=>"Share Price Change [$]",
),
array(
"id"=>"p-pr",
"ky"=>"changePercent",
"lb"=>"Share Price Change [%]",
),
array(
"id"=>"p-mp",
"ky"=>"iexMarketPercent",
"lb"=>"Source Market Share [%]",
),
array(
"id"=>"v-vl",
"ky"=>"iexVolume",
"lb"=>"Source Volume [V]",
),
array(
"id"=>"v-av",
"ky"=>"avgTotalVolume",
"lb"=>"Average Total Volume [V]",
),
array(
"id"=>"d-bp",
"ky"=>"iexBidPrice",
"lb"=>"Source Bid Price [$]",
),
array(
"id"=>"v-bs",
"ky"=>"iexBidSize",
"lb"=>"Source Bid Size [V]",
),
array(
"id"=>"d-ap",
"ky"=>"iexAskPrice",
"lb"=>"Source Ask Price [$]",
),
array(
"id"=>"v-as",
"ky"=>"iexAskSize",
"lb"=>"Source Ask Size [V]",
),
array(
"id"=>"d-cc",
"ky"=>"marketCap",
"lb"=>"Company Market Cap [$]",
),
array(
"id"=>"s-pe",
"ky"=>"peRatio",
"lb"=>"PE Ratio",
),
array(
"id"=>"d-wh",
"ky"=>"week52High",
"lb"=>"52-Week High [$]",
),
array(
"id"=>"d-wl",
"ky"=>"week52Low",
"lb"=>"52-Week Low [$]",
),
array(
"id"=>"p-yt",
"ky"=>"ytdChange",
"lb"=>"YTD Change",
),
);
return $params;
} Quote: Tuesday, 12 March 2019 ⏱ 12:08 EDT
Symbol: AAPL
Company: Apple Inc.
Primary Exchange Market: Nasdaq Global Select
Market Sector: Technology
Open Share Price [$]: $180.0000
Open Time: Tuesday, 12 March 2019 ⏱ 09:30 EDT (-04:00 UTC)
Close Share Price [$]: $178.9000
Close Time: Monday, 11 March 2019 ⏱ 16:00 EDT (-04:00 UTC)
Current High Share Price [$]: $182.6700
Current Low Share Price [$]: $179.3700
Current Latest Share Price [$]: $181.4100
Data Source: IEX real time price
Current Latest Update: Tuesday, 12 March 2019 ⏱ 12:06 EDT (-04:00 UTC)
Current Latest Volume [V]: 17,157,291
Source Near-Real-Time Share Price [$]: $181.4100
Source Near-Real-Time Size [V]: **100
Source Latest Update: Tuesday, 12 March 2019 ⏱ 12:06 EDT (-04:00 UTC)
Delayed Share Price [$]: $181.7210
Delayed Share Price Time: Tuesday, 12 March 2019 ⏱ 11:51 EDT (-04:00 UTC)
Extended Share Price [$]: $181.4100
Extended Share Price Time: Tuesday, 12 March 2019 ⏱ 12:06 EDT (-04:00 UTC)
Close Share Price in Previous Session [$]: $178.9000
Share Price Change [$]: $2.5100
Share Price Change [%]: ****0.0140%
Source Market Share [%]: ****0.0222%
Source Volume [V]: 381,235
Average Total Volume [V]: 27,155,838
Source Bid Price [$]: $180.0000
Source Bid Size [V]: **100
Source Ask Price [$]: $185.0000
Source Ask Size [V]: **500
Company Market Cap [$]: $855,398,944,800.0000
PE Ratio: 15.28
52-Week High [$]: $233.4700
52-Week Low [$]: $142.0000
YTD Change: ****0.1517%/*switch display*/
s:function(z){
var x,a;
x=/(di-0)/i;
if(x.test(z.d.nextElementSibling.attributes.getNamedItem('class').nodeValue)){a=1}else{a=0}
switch (a){
case 1:
z.d.nextElementSibling.attributes.getNamedItem('class').nodeValue='di-2';
break;
case 0:
z.d.nextElementSibling.attributes.getNamedItem('class').nodeValue='di-0';
break;
}
}.di-0{display:none!important}.di-1{display:inline-block}.di-2{display:block}.di-3{display:grid}.r100,
r100 a {
color: #FFFFFF
}
.b100,
.b100 a {
background-color: #FFFFFF
}
.r101,
r101 a {
color: #F8F8FF
}
.b101,
.b101 a {
background-color: #F8F8FF
}
.r102,
r102 a {
color: #F7F7F7
}
.b102,
.b102 a {
background-color: #F7F7F7
}
.r103,
r103 a {
color: #F0F0F0
}
.b103,
.b103 a {
background-color: #F0F0F0
}
.r104,
r104 a {
color: #F2F2F2
}
.b104,
.b104 a {
background-color: #F2F2F2
}
.r105,
r105 a {
color: #EDEDED
}
.b105,
.b105 a {
background-color: #EDEDED
}
.r106,
r106 a {
color: #EBEBEB
}
.b106,
.b106 a {
background-color: #EBEBEB
}
.r107,
r107 a {
color: #E5E5E5
}
.b107,
.b107 a {
background-color: #E5E5E5
}
.r108,
r108 a {
color: #E3E3E3
}
.b108,
.b108 a {
background-color: #E3E3E3
}
.r109,
r109 a {
color: #E0E0E0
}
.b109,
.b109 a {
background-color: #E0E0E0
}
.r110,
r110 a {
color: #858585
}
.b110,
.b110 a {
background-color: #858585
}
.r111,
r111 a {
color: #666666
}
.b111,
.b111 a {
background-color: #666666
}
.r112,
r112 a {
color: #545454
}
.b112,
.b112 a {
background-color: #545454
}
.r113,
r113 a {
color: #4D4D4D
}
.b113,
.b113 a {
background-color: #4D4D4D
}
.r114,
r114 a {
color: #474747
}
.b114,
.b114 a {
background-color: #474747
}
.r115,
r115 a {
color: #363636
}
.b115,
.b115 a {
background-color: #363636
}
.r116,
r116 a {
color: #333333
}
.b116,
.b116 a {
background-color: #333333
}
.r117,
r117 a {
color: #222222
}
.b117,
.b117 a {
background-color: #222222
}
.r118,
r118 a {
color: #1C1C1C
}
.b118,
.b118 a {
background-color: #1C1C1C
}
.r119,
r119 a {
color: #050505
}
.b119,
.b119 a {
background-color: #050505
}
.r120,
r120 a {
color: #EEEE00
}
.b120,
.b120 a {
background-color: #EEEE00
}
.r121,
r121 a {
color: #FFD700
}
.b121,
.b121 a {
background-color: #FFD700
}
.r122,
r122 a {
color: #EEC900
}
.b122,
.b122 a {
background-color: #EEC900
}
.r123,
r123 a {
color: #EAC80D
}
.b123,
.b123 a {
background-color: #EAC80D
}
.r124,
r124 a {
color: #FFC125
}
.b124,
.b124 a {
background-color: #FFC125
}
.r125,
r125 a {
color: #FFB90F
}
.b125,
.b125 a {
background-color: #FFB90F
}
.r126,
r126 a {
color: #EEAD0E
}
.b126,
.b126 a {
background-color: #EEAD0E
}
.r127,
r127 a {
color: #DAA520
}
.b127,
.b127 a {
background-color: #DAA520
}
.r128,
r128 a {
color: #BFA30C
}
.b128,
.b128 a {
background-color: #BFA30C
}
.r129,
r129 a {
color: #B78A00
}
.b129,
.b129 a {
background-color: #B78A00
}
.r130,
r130 a {
color: #FFA500
}
.b130,
.b130 a {
background-color: #FFA500
}
.r131,
r131 a {
color: #FF9912
}
.b131,
.b131 a {
background-color: #FF9912
}
.r132,
r132 a {
color: #ED9121
}
.b132,
.b132 a {
background-color: #ED9121
}
.r133,
r133 a {
color: #FF7F00
}
.b133,
.b133 a {
background-color: #FF7F00
}
.r134,
r134 a {
color: #FF8000
}
.b134,
.b134 a {
background-color: #FF8000
}
.r135,
r135 a {
color: #EE7600
}
.b135,
.b135 a {
background-color: #EE7600
}
.r136,
r136 a {
color: #EE6A50
}
.b136,
.b136 a {
background-color: #EE6A50
}
.r137,
r137 a {
color: #EE5C42
}
.b137,
.b137 a {
background-color: #EE5C42
}
.r138,
r138 a {
color: #FF6347
}
.b138,
.b138 a {
background-color: #FF6347
}
.r139,
r139 a {
color: #FF6103
}
.b139,
.b139 a {
background-color: #FF6103
}
.r140,
r140 a {
color: #32CD32
}
.b140,
.b140 a {
background-color: #32CD32
}
.r141,
r141 a {
color: #00C957
}
.b141,
.b141 a {
background-color: #00C957
}
.r142,
r142 a {
color: #43CD80
}
.b142,
.b142 a {
background-color: #43CD80
}
.r143,
r143 a {
color: #00C78C
}
.b143,
.b143 a {
background-color: #00C78C
}
.r144,
r144 a {
color: #1ABC9C
}
.b144,
.b144 a {
background-color: #1ABC9C
}
.r145,
r145 a {
color: #20B2AA
}
.b145,
.b145 a {
background-color: #20B2AA
}
.r146,
r146 a {
color: #03A89E
}
.b146,
.b146 a {
background-color: #03A89E
}
.r147,
r147 a {
color: #00C5CD
}
.b147,
.b147 a {
background-color: #00C5CD
}
.r148,
r148 a {
color: #00CED1
}
.b148,
.b148 a {
background-color: #00CED1
}
.r149,
r149 a {
color: #48D1CC
}
.b149,
.b149 a {
background-color: #48D1CC
}
.r150,
r150 a {
color: #63B8FF
}
.b150,
.b150 a {
background-color: #63B8FF
}
.r151,
r151 a {
color: #00B2EE
}
.b151,
.b151 a {
background-color: #00B2EE
}
.r152,
r152 a {
color: #1E90FF
}
.b152,
.b152 a {
background-color: #1E90FF
}
.r153,
r153 a {
color: #1C86EE
}
.b153,
.b153 a {
background-color: #1C86EE
}
.r154,
r154 a {
color: #1C86EE
}
.b154,
.b154 a {
background-color: #1C86EE
}
.r155,
r155 a {
color: #1874CD
}
.b155,
.b155 a {
background-color: #1874CD
}
.r156,
r156 a {
color: #436EEE
}
.b156,
.b156 a {
background-color: #436EEE
}
.r157,
r157 a {
color: #4169E1
}
.b157,
.b157 a {
background-color: #4169E1
}
.r158,
r158 a {
color: #3A5FCD
}
.b158,
.b158 a {
background-color: #3A5FCD
}
.r159,
r159 a {
color: #014B96
}
.b159,
.b159 a {
background-color: #014B96
}
.r160,
r160 a {
color: #EE7AE9
}
.b160,
.b160 a {
background-color: #EE7AE9
}
.r161,
r161 a {
color: #DA70D6
}
.b161,
.b161 a {
background-color: #DA70D6
}
.r162,
r162 a {
color: #BA55D3
}
.b162,
.b162 a {
background-color: #BA55D3
}
.r163,
r163 a {
color: #BF3EFF
}
.b163,
.b163 a {
background-color: #BF3EFF
}
.r164,
r164 a {
color: #B23AEE
}
.b164,
.b164 a {
background-color: #B23AEE
}
.r165,
r165 a {
color: #9B30FF
}
.b165,
.b165 a {
background-color: #9B30FF
}
.r166,
r166 a {
color: #836FFF
}
.b166,
.b166 a {
background-color: #836FFF
}
.r167,
r167 a {
color: #7A67EE
}
.b167,
.b167 a {
background-color: #7A67EE
}
.r168,
r168 a {
color: #9F79EE
}
.b168,
.b168 a {
background-color: #9F79EE
}
.r169,
r169 a {
color: #8968CD
}
.b169,
.b169 a {
background-color: #8968CD
}
.r170,
r170 a {
color: #FF6EB4
}
.b170,
.b170 a {
background-color: #FF6EB4
}
.r171,
r171 a {
color: #FF69B4
}
.b171,
.b171 a {
background-color: #FF69B4
}
.r172,
r172 a {
color: #EE3A8C
}
.b172,
.b172 a {
background-color: #EE3A8C
}
.r173,
r173 a {
color: #FF34B3
}
.b173,
.b173 a {
background-color: #FF34B3
}
.r174,
r174 a {
color: #FF1493
}
.b174,
.b174 a {
background-color: #FF1493
}
.r175,
r175 a {
color: #EE1289
}
.b175,
.b175 a {
background-color: #EE1289
}
.r176,
r176 a {
color: #CD2990
}
.b176,
.b176 a {
background-color: #CD2990
}
.r177,
r177 a {
color: #D02090
}
.b177,
.b177 a {
background-color: #D02090
}
.r178,
r178 a {
color: #C71585
}
.b178,
.b178 a {
background-color: #C71585
}
.r179,
r179 a {
color: #CD1076
}
.b179,
.b179 a {
background-color: #CD1076
}
.r180,
r180 a {
color: #FF4500
}
.b180,
.b180 a {
background-color: #FF4500
}
.r181,
r181 a {
color: #EE4000
}
.b181,
.b181 a {
background-color: #EE4000
}
.r182,
r182 a {
color: #FF4040
}
.b182,
.b182 a {
background-color: #FF4040
}
.r183,
r183 a {
color: #EE3B3B
}
.b183,
.b183 a {
background-color: #EE3B3B
}
.r184,
r184 a {
color: #EE2C2C
}
.b184,
.b184 a {
background-color: #EE2C2C
}
.r185,
r185 a {
color: #FF0000
}
.b185,
.b185 a {
background-color: #FF0000
}
.r186,
r186 a {
color: #DC143C
}
.b186,
.b186 a {
background-color: #DC143C
}
.r187,
r187 a {
color: #CD0000
}
.b187,
.b187 a {
background-color: #CD0000
}
.r188,
r188 a {
color: #B0171F
}
.b188,
.b188 a {
background-color: #B0171F
}
.r189,
r189 a {
color: #8B2323
}
.b189,
.b189 a {
background-color: #8B2323
}
.r190,
r190 a {
color: #FF6A6A
}
.b190,
.b190 a {
background-color: #FF6A6A
}
.r191,
r191 a {
color: #CD7054
}
.b191,
.b191 a {
background-color: #CD7054
}
.r192,
r192 a {
color: #CD6839
}
.b192,
.b192 a {
background-color: #CD6839
}
.r193,
r193 a {
color: #CD661D
}
.b193,
.b193 a {
background-color: #CD661D
}
.r194,
r194 a {
color: #C76114
}
.b194,
.b194 a {
background-color: #C76114
}
.r195,
r195 a {
color: #CD5B45
}
.b195,
.b195 a {
background-color: #CD5B45
}
.r196,
r196 a {
color: #CD4F39
}
.b196,
.b196 a {
background-color: #CD4F39
}
.r197,
r197 a {
color: #CD3333
}
.b197,
.b197 a {
background-color: #CD3333
}
.r198,
r198 a {
color: #CD2626
}
.b198,
.b198 a {
background-color: #CD2626
}
.r199,
r199 a {
color: #CD3700
}
.b199,
.b199 a {
background-color: #CD3700
}
发布于 2019-03-17 20:27:30
这里有很多事情要做,但我将集中在三个具体的问题,我发现在您的例子中最突出的,可读性,干燥和冗余。
可读性:
代码应尽可能容易阅读,应尽可能避免复杂性。很难读的代码是很难修改的,我们迟早都需要修改代码。
命名变量是很重要的,使用单个字符变量名称只是令人困惑。
干
不要重复你自己。重复编码的做法是在多个地方大量重复编码。
<#>冗余
不必要的代码
更改:
$a变量重命名为更合适的对象,例如$data (可读性)UpdateStocks::getQuoteParams()移动到foreach中,删除$i变量(冗余)$k变量中的foreach (冗余)$p变量重命名为$parameters (可读性)$id代替$parameter["id"] (可读性)preg_match是可用的,但在这种特殊情况下,您只使用前两个字符,所以可以使用substr,因此更容易(可读性)$hs变量重命名为更合适的东西,如$html (可读性)$lb而不是$parameter["lb"] (可读性)$h变量,不需要(冗余)$bt移到底部(可读性)我做了一个gif,在示例中给您演示代码重构,大约需要10分钟。
注意:不要直接复制代码,它还没有经过测试,已经合成了模拟数据并对其进行了一些更改,这样我就可以运行它(例如更改日期)。这只是一个例子,你已经被警告了。:-)
发布于 2019-03-19 06:36:08
一般的建议,我将适用于您的张贴代码:
if、foreach等),因为它们在读取代码时会增加水平滚动。return而不是通常的break,因此语法稍微紧凑一些。您似乎不需要验证$p["id"]的定义字符(S),甚至没有使用连字符。因此,您不需要调用任何函数来提取第一个(单字节)字符--您可以使用平方大括号语法通过其偏移量来访问一个字符(在本例中为0)。
我将尝试在html元素中保持一些选项卡的外观,而不会使线宽受到太大的影响。这可以通过多种方式实现。如果您或其他人选择以不同的方式声明$html的连接,我不会生气。
我可以想象$a的意思是array,但是最好给它一个描述性更强的名称。像$string、$array、$data、$number这样的变量通常是重命名的好选择。脚本中通常有多个数组。
如果您的项目实际上需要对$p["id"]的领先子字符串进行更多的验证,那么在诉诸preg_函数之前,尝试使用非正则化工具(如substr() )。
未经测试的守则:
public static function formatQuoteValue($id, $a_ky) {
switch ($id[0]) {
case "s": return $a_ky;
case "d": return money_format('%=9.4n', (double)$a_ky);
case "v": return money_format('%=*!#4.0n', (double)$a_ky);
case "t": return date('l, d F Y \⏱ H:i T \(P \U\T\C\)', (double)$a_ky/1000);
case "p": return money_format('%=*!#4.4n', (double)$a_ky) . '%';
default: return $a_ky . '%';
}
}
public static function getQuoteHTML($a) {
$html = '' .
'' .
' Quote: ' . date('l, d F Y \⏱ H:i T', microtime(true)) .
'' .
'' .
'';
foreach (UpdateStocks::getQuoteParams() as $param) {
if (!isset($param["id"]) || empty($a[$param["ky"]])) {
continue;
}
$class = 'di-1 t-21 m-1 br-3 p-2 b119 r1' . rand(20,99);
$html .= '';
$html .= '' . $param["lb"] . ': ';
$html .= '' . UpdateStocks::formatQuoteValue($param["id"], $a[$param["ky"]]) . '';
$html .= '';
}
$html .= '' .
'' .
'';
return $html;
}https://codereview.stackexchange.com/questions/215281
复制相似问题