昨日同じ内容のものを投稿しましたが、出来ませんでした。。。
テキストエリアに入力された値を取得し、一行ずつ処理をしたいです。
以下の配列はテキストエリアに入力された値を一行ずつ改行区切りで配列に格納したものになります。
入力される形式は変わりませんが、中の値は変わってきます。先頭の数字が317ではなく、200などの値がくるときもあります。
#以下も文字列扱いです。
PHP
1Array 2( 3 [0] => 317#118#1490#220#0 4 [1] => 317#220##7000#355##0 5 [2] => 317#355##10000#510##0 6 [3] => 317#510##10000#645##3500 7 [4] => 317###### 8)
最終結果としては、以下の形にしたいと考えています。
//出力結果
317#0#7365#527#0
このように出力したいです。
317#0#7365#527#0を例にとってご説明します。
初めの317は配列の0~4番目まで来ている317をそのまま表示をする形です。
#527は、0~4番目の配列の初めの#の後に来ている数字(118,220,355,510)を足したものから、3番目の#の後に来ている数字(220,355,510,645)を足したものを引いています。
#7365は、少し複雑で、2番目の#の後に来ている数字(1490,7000,10000,10000)を足したものから、最後の#の後に来ている数字(0,0,0,3500)を足したものを引くのですが、
//#1490 #1つだった場合は、1490*4をしたものを足す
//##7000 #2つがあった場合は、そのまま足す
//#0 #1つだった場合は、0*4をしたものを足す
//##0 #2つがあった場合は、そのまま足す
最後の317######は無視という形になります。
PHP
1$rotation = 0; 2$rotation_end = 0; 3$start_money = 0; 4$end_money = 0; 5$rotation2 = 0; 6$rotation2_end = 0; 7$balls = 0; 8$balls_end = 0; 9$number = 0; 10foreach($data_array as $value) { 11 if(preg_match('/\#{3}/',$value)) { 12 $valueArray = explode('#', $value); 13 $number += $valueArray[0]; 14 unset($value); 15 } 16 if(preg_match('/\#{2}/', $value)) { 17 $value = str_replace("##", "#", $value); 18 $valueArray = explode('#', $value); 19 $rotation += $valueArray[1]; 20 $rotation_end += $valueArray[3]; 21 $start_money += $valueArray[2]; 22 $end_money += $valueArray[4]; 23 } 24 else{ 25 $valueArray = explode('#', $value); 26 $rotation2 += $valueArray[1]; 27 $rotation2_end += $valueArray[3]; 28 $balls += $valueArray[2]; 29 $balls_end += $valueArray[4]; 30 31 } 32} 33$midMoney = $start_money + ($balls * 4) - $end_money + ($balls_end * 4); 34$resultMoney = $midMoney/4; 35$resultNOR = ($rotation_end + $rotation2_end) - ($rotation + $rotation2); 36$border = $resultNOR*250/$resultMoney; 37echo $number.'#0#'.$resultMoney.'#'.$resultNOR.'#0('.round($border, 2).')'; 38//317#0#7365#527#0(17.89) 39}
このような記述で無事に出力出来たのですが、
PHP
1Array 2( 3 [0] => 317#118#1490#220#0 4 [1] => 317#220##7000#355##0 5 [2] => 317#355##10000#510##0 6 [3] => 317#510##10000#645##3500 7 [4] => 317###### 8 [5] => 311#0##10000#179##0 9 [6] => 311#179##10000#292##3500 10 [7] => 311#192##23500#586##7500 11 [8] => 311### 12)
このように先頭の317以外の311が出てきた場合に
317から始まるもの、311で始まるもの、を別として計算したいです。
なので出力には、以下のようにしたいです。
317#0#7365#527#0(17.89)
311#0#8125#686#0(21.11)
ですが、私が試みた記述だと、317から始まるもの、311で始まるもの、を別として計算できません。。。
ご教授お願いしたいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/10/26 06:15
2015/10/26 06:21