ช่วยดูเรื่อง array_sum หน่อยครับ จากโคต๊ตัวอย่างแนวทางการแทรกแถว
ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา ช่วยดูเรื่อง array_sum หน่อยครับ จากโคต๊ตัวอย่างแนวทางการแทรกแถว
ช่วยดูเรื่อง array_sum หน่อยครับ จากโคต๊ตัวอย่างแนวทางการแทรกแถว
Copy
จากโคต๊ตัวอย่างนำมาดัดแปลงครับ <?php require_once('Connections/koh_samaesan2.php'); require('/include/Paginator.php'); $objConnect = mysql_connect("localhost","root","") or die("ไม่สามารถเชื่อมต่อฐานข้อมูลได้"); $objDB = mysql_select_db("koh_samaesan2") or die("ไม่สามารถใช้งานฐานข้อมูลได้"); mysql_query("set names 'utf8'"); ?> <?php session_start(); error_reporting( error_reporting() & ~E_NOTICE ); if(empty($_SESSION["ID_emp"])){ header("Refresh: 0; url=login.html"); } $ID_emp = $_SESSION["ID_emp"]; $first_name = $_SESSION["first_name"]; $last_name = $_SESSION["last_name"]; $nameposition = $_SESSION["nameposition"]; $idposition = $_SESSION["idposition"]; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>รายงานสรุปประจำเดือน</title> <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"> <link href="bootstrap/css/subdropdown.css" rel="stylesheet" type="text/css"> <!-- Optional theme --> <link rel="stylesheet" href="bootstrap/css/bootstrap-theme.min.css"> <!-- Latest compiled and minified JavaScript --> <script src="bootstrap/js/bootstrap.min.js"></script> <link rel="stylesheet" href="bootstrap/css/styles.css"> <style type="text/css"> body,td,th { font-size: 14px; text-align: center; } </style> <style type="text/css"> <!-- .paginate { font-family: Arial, Helvetica, sans-serif; font-size: .7em; } a.paginate { border: 1px solid #000080; padding: 2px 6px 2px 6px; text-decoration: none; color: #000080; } h2 { font-size: 12pt; color: #003366; } h2 { line-height: 1.2em; letter-spacing:-1px; margin: 0; padding: 0; text-align: left; } a.paginate:hover { background-color: #000080; color: #FFF; text-decoration: underline; } a.current { border: 1px solid #000080; font: bold .7em Arial,Helvetica,sans-serif; padding: 2px 6px 2px 6px; cursor: default; background:#000080; color: #FFF; text-decoration: none; } span.inactive { border: 1px solid #999; font-family: Arial, Helvetica, sans-serif; font-size: .7em; padding: 2px 6px 2px 6px; color: #999; cursor: default; } --> </style> </head> <body> <?php if ($idposition == 2){ require('/navbar/emp2nav.php'); } else if ($idposition == 3){ require('/navbar/emp3nav.php'); } else{ require('/navbar/emp1nav.php'); } ?> <!-------------------------------navigation bar----------------------------------> <div class="container" align="left" > <div class="panel panel-default"> <div class="panel-body "> <div class="line" > <table width="100%" border="0"> <tr> <td width="100%" align="center" valign="middle"><img src="Image/" width="180" height="85"></td> </tr> </table> </div> <br> <table class="table table-bordered table-condensed" align="center" valign="middle" style="width:550px;"> <thead> <tr class="bg-success"> <th>เดือน/ปี</th> <th>รายละเอียด</th> <th>จำนวนเงิน</th> </tr> </thead> <tbody> <?php // ส่วนของการกำนหดแสดงการแบ่ง ส่วนของข้อมูลของวันที่ที่ต่างกัน $temp_data1=null; $temp_data2=null; $data_show=1; // 1 แสดง 0 ไม่แสดง // กำหนดสำหรับอ้างอิง key ของตัวแปร $i=1; // ส่วนกำหนดตัวแปร สำหรับเก็บค่าวันที่ และเปรียบเทียบ $arr_dateCheck=array(); // ส่วนกำหนดตัวแปรสำหรับเก็บค่าข้อมูลสะสมในแต่ละ คอลัมน์ที่ต้องการ กำหนดเป็น array $aggre_price=array(); $aggre_com=array(); // ส่วนกำหนดตัวแปรสำหรับเก็บค่าข้อมูลในแต่ละ คอลัมน์ที่ต้องการ กำหนดเป็น array $data_price=array(); $data_com=array(); //ส่วนกำหนดตัวแปรจัดการแบ่งหน้า $Per_Page =15; // Per Page $Page = $_GET["Page"]; $Page_Start = (($Per_Page*$Page)-$Per_Page); $q=" select * from ( select DATE_FORMAT(date_buy,'%m-%Y') as datadate,descript, Sum(amount) AS totalAmount from buy_ticket GROUP BY datadate union all select DATE_FORMAT(date_book,'%m-%Y')AS datadate,descript , Sum(amount) from book_ticket GROUP BY datadate UNION ALL select DATE_FORMAT(date_time,'%m-%Y')as datadate,descript , Sum(amount_mask) from rent_mask GROUP BY datadate ) as tmp order by datadate desc "; $rs=mysql_query($q); //$total=$rs->num_rows; $total = mysql_num_rows($rs); if(!$_GET["Page"]) { $Page=1; } $Prev_Page = $Page-1; $Next_Page = $Page+1; if($total<=$Per_Page) { $Num_Pages =1; } else if(($i % $Per_Page)==0) { $Num_Pages =($total/$Per_Page) ; } else { $Num_Pages =($total/$Per_Page)+1; $Num_Pages = (int)$Num_Pages; } $q .=" LIMIT $Page_Start , $Per_Page"; $rs = mysql_query($q); while($data=mysql_fetch_assoc($rs)){ $show_row_end=0; // เริ่มต้นการแบ่ง กำหนดเป็น 0 // จัดรูปแบบ key วันที่ที่จะใช้เก็บข้อมูล $dateKey=date("dmY",strtotime($data['datadate'])); /// ส่วนของการกำนหด การเปรียบค่าของรายการ เพื่อแบ่งวันที่เป็นสัดส่วน $temp_data1=$data['datadate']; if($temp_data2==null){ $temp_data2=$temp_data1; $data_show=1; }else{ if($temp_data1==$temp_data2){ $data_show=0; $temp_data2=$temp_data1; }else{ $temp_data2=$temp_data1; $data_show=1; } } // เก็บค่าวันที่ของรายการข้อมูลไว้ในตัวแปร สำหรับเปรียบเทียบ $arr_dateCheck[$i]=$data['datadate']; // ถ้าไม่ใช้ข้อมูลรายการแรก และ ข้อมูลวันที่รายการก่อนหน้า ไม่เท่ากับรายการที่กำลังแสดง // นั่นหมายถึงจุดที่เราจะกำหนดว่า เป็นรายการสุดท้ายของวันที่หนึ่งๆ if($i>1 && $arr_dateCheck[$i-1]!=$data['datadate']){ // กำหนด key วันที่ที่จะเช็ค $dateKeyCheck=date("dmY",strtotime($arr_dateCheck[$i-1])); $show_row_end=1; // ให้แสดง หรือแทรกแถวที่ต้องการได้ } // ส่วนของการเก็บข้อมูลไว้ใน array เพื่อใช้งานผลรวม if(!isset($data_price[$dateKey])){ // ถ้าไม่มีตัวแปร $data_price[$dateKey]=array(); // ให้กำหนด array_push($data_price[$dateKey],$data['totalAmount']); // และเพิ่มค่า }else{ array_push($data_price[$dateKey],$data['totalAmount']); // เพิ่มค่าใน array } ?> <?php // แทรกแถวที่ต้องการกรณีปกติ กรณีนี้ รายการสุดท้ายจะไม่ขึ้น เราจะเพิ่มการแทรกไว้ด้านหลัง // ของข้อมูลแทน if($show_row_end==1){?> <?php // รวมค่าข้อมูลแต่ละวัน แล้วเพิ่มเข้าไปใน array รายการค่าสะสม array_push($aggre_price,array_sum($data_price[$dateKeyCheck])); ?> <tr class="bg-warning"> <td class="text-right">รวมรายเดือน</td> <td></td> <th><?=array_sum($data_price[$dateKeyCheck])?> บ.</th> </tr> <?php } ?> <tr> <td> <?php if($data_show==1){?> <?=$data['datadate']?> <?php } ?> </td> <td><?=$data['descript']?></td> <td><?=$data['totalAmount']?> บ.</td> </tr> <?php if( // สำหรับแทรก กรณีเป็นรายการสุดท้ายในตาราง $i==$total){?> <?php // รายการสุดท้าย กำหนด key เช็คเป็นค่าที่รูปแบบตรงกัน $dateKeyCheck=date("dmY",strtotime($data['datadate'])); // รวมค่าข้อมูลแต่ละวัน แล้วเพิ่มเข้าไปใน array รายการค่าสะสม array_push($aggre_price,array_sum($data_price[$dateKeyCheck])); ?> <tr class="bg-warning"> <td class="text-right">รวมรายเดือน</td> <td></td> <th><?=array_sum($data_price[$dateKeyCheck])?> บ.</th> </tr> <?php } ?> <?php $i++; } ?> </tbody> </table> Total <?php echo $total;?> Record <?php $pages = new Paginator; $pages->items_total = $total; $pages->mid_range = 10; $pages->current_page = $Page; $pages->default_ipp = $Per_Page; $pages->url_next = $_SERVER["PHP_SELF"]."?QueryString=value&Page="; $pages->paginate(); echo $pages->display_pages() ?> </div> </div> </div> <script src="bootstrap/js/jquery.min.js"></script> <script src="bootstrap/js/bootstrap.min.js"></script> </body> </html>
ในการรวมแต่ละเดือนไม่ถูกต้องอะครับ คาดว่าน่าจะเป็นส่วนโคต๊ตรงนี้หรือเปล่า
$dateKey=date("dmY",strtotime($data['datadate']));จะแก้ไขยังไงดีครับพอดีลองเปลี่ยนเป็นแค่ mY ก็แล้ว แต่ถ้าเเป็นที่เรคคอร์ดมาแบบวันแต่ละวันผลถูกต้องครับใช้dmY
ขอบคุณครับ

คำแนะนำ และการใช้งาน
สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก
- ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา
โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ