よく見たら自分の打ち間違えが少し(cd→ch……何故こうなったし)
/*************************************************************************************
この配列を$multiArrayとして、
$a1=array(
0=>Array([0]=>"m1",[1]=>14,[2]=>5,[3]=>3)
,1=>Array([0]=>"m1",[1]=>14,[2]=>3,[3]=>5)
,2=>Array([0]=>"m2",[1]=>28,[2]=>1,[3]=>30)
,3=>Array([0]=>"m1",[1]=>28,[2]=>2,[3]=>10)
);
$data[0]=m1・・・とforeachで取り出して、$data=array(m1,m1,m2,m1)を作ってmultiArrayを$dataで並び替え(m1,m1,m1,m2)
*************************************************************************************/
配列の格納はご想像通りです
/*************************************************************************************
cdの計算を先に行なって配列に格納,cdflash=[1.5,1.5,3,2]
次の$wkSinArr = array($mulchArray[0]);は配列に配列を格納したもので、$wkSinArr[0]はArray([0]=>"m1",[1]=>14,[2]=>5,[3]=>3)という配列を取り出しているということになるのでしょうか?
そう考えると$wkSinArr[0] == $mulchArray[$x][0] はArray([0]=>"m1",[1]=>14,[2]=>5,[3]=>3)="m1"となって完全に手詰まりになってしまいます・・・。
*************************************************************************************/
どう解釈されているのかわからないですが
if($wkSinArr[0] == $mulchArray[$x][0] && $wkSinArr[1] == $mulchArray[$x][1])で
最初に比較対象として保存した一時配列wkSinArr[0]はmulchArray[0][0]と同じです
if内では[0]要素と[1]要素がmulchArrayの次の物と同じであればcdの計算を合計します
ただし違う物であった場合、合計した物をbでかけて、現在参照している違う物を比較対象として保存します
"&&"は「○○且つ(チェック)(チェック)」の様にANDの意味合いです(知っているとは思いますが)
/*************************************************************************************
$wkSinArr[0] が"m1"であれば、m1である間は$wk1が足されて、上記でいう4番目のm2にきたときにelse文に移動して、五捨六入されて、"14"をかけて$singleArray[]にいれ、新しい行のデータに更新後、繰り返し、最後に$singleArray[]の数値を足し合わせるという事になりわかる気がします。
*************************************************************************************/
3番目で要素[1]が違うので否となり要素[2]と[3]は別計算となります
/*************************************************************************************
ちなみに、五捨五超入は、1.49999は1、1.5は1、1.51は2、1.5000000001は2というもので、桁数が無限だとわからないですが、桁数が10桁とか指定してしまえば、
for($ii=1;$ii<10;$ii++){ //小数点以下は10桁まではカウント
if(strlen($cpricearray[1])==$ii){
$keta=pow(10,$ii-1);//10の何乗
if($cpricearray[1] > 5*$keta){
$kuri=1;
}else{
$kuri=0;
}
のような形で無理やり計算できていました。
*************************************************************************************/
許容する桁数が分からないかったですがそうなると
「$wk1 = round($wk1, 0, PHP_ROUND_HALF_DOWN);」が
//丸めたい桁数から繰り上げていく、少数第一位にまで繰り上げ
for($cnt = 10;$cnt >= 1;$cnt--){
$wk1 = round($wk1,$cnt);
}
//全て繰り上げた結果がn.6以上なら少数を繰り上げ
$wk1 = round($wk1, 0, PHP_ROUND_HALF_DOWN);
になるかと
自分の回答は全て未検証なのでコピペではなく自分で理解して
望むソースに変更して頂けくと尚の事よろしいかと思います(わからないことは答えますので)
お礼
何度かいじくっているうちに分かって来ました。ソースも使わせて頂き、無事期待したプログラムを組むことができました。本当に感謝しております。