|
|
|
สวัสดีคะรบกวนสอบถามเรื่อง วนลูปแสดงข้อมูลในตารางแนวนอนคะ |
|
|
|
|
|
|
|
สวัสดีคะรบกวนสอบถามเรื่อง วนลูปแสดงข้อมูลในตารางแนวนอนคะ
ปัญหาคือข้อมูลแสดงซ้ำคะ และบางช่องคำนวณไม่ถูก ถ้ามีวิธีที่ง่ายกว่ารบกวนแนะนำด้วยนะคะ
รูปแรกคือการแสดงข้อมูลที่ถูกต้องคะ
รูปที่สองคือมีปัญหาคะ
Code
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title></title>
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/css/bootstrap.min.css">
</head>
<body>
<br>
<?php
$data_ = Array
(
Array
(
"Products" => 'H8470WS/3',
"Code" => '1538-26896',
"Size" => 'L',
"Receive" => 150,
"Amount" => 97,
"number" => 1
),
Array
(
"Products" => 'H8470WS/3',
"Code" => '1538-26896',
"Size" => 'M',
"Receive" => 50,
"Amount" => 20,
"number" => 2
),
Array
(
"Products" => 'H8470WS/3',
"Code" => '1538-26896',
"Size" => 'L',
"Receive" => 200,
"Amount" => 97,
"number" => 1
),
Array
(
"Products" => 'H8470WS/3',
"Code" => '1538-26896',
"Size" => 'M',
"Receive" => 200,
"Amount" => 52,
"number" => 2
),
Array
(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'XS',
"Receive" => 100,
"Amount" => 20,
"number" => 3,
),
Array
(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'XXS',
"Receive" => '100',
"Amount" => 30,
"number" => 4
),
Array
(
"Products" => 'H8470WS/3',
"Code" => '1538-25555',
"Size" => 'XXS',
"Receive" => 28,
"Amount" => 28,
"number" => 5
),
Array
(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'XL',
"Receive" => 100,
"Amount" => 20,
"number" => 3
),
Array
(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'XXL',
"Receive" => 100,
"Amount" => 20,
"number" => 4
),
Array
(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'XXXL',
"Receive" => 100,
"Amount" => 30,
"number" => 5
)
);
echo '<pre>',print_r($data_,true),'</pre>';
$arr_id = array();
$arr_size = array();
$arr_amount1 = array();
$arr_amount2 = array();
foreach($data_ as $data){
$arr_id[$data['Products']] = $data['Products']; // เป็น array 1 มิติ ค่าวนลูปแนวตั้ง
$arr_size[$data['Size']] = $data['Size']; // เป็น array 1 มิติ ค่าวนลูปแนวนอน
$arr_amount1[$data['Products']][$data['Size']]['Receive'][] = $data['Receive'];
$arr_amount2[$data['Products']][$data['Size']]['Amount'][] = $data['Amount'];
}
?>
<br>
<div style="width:98%;margin:0px 0px 0px 20px;">
<div class="table-responsive">
<h4>
<?php foreach($arr_id as $style){ ?>
<table class="table table-bordered">
<tr class="active">
<td align="center" width="150"><?=$style?></td>
<?php foreach($arr_size as $size){ ?>
<td align="center"><?=$size?></td>
<?php } ?>
<td align="center">ยอดรวม</td>
</tr>
<?php
$total_s1=array();
$total_s2=array();
?>
<!-- Receive -->
<?php foreach($arr_id as $check_id){ ?>
<tr>
<td width="100" align="center">Receive </td>
<?php foreach($arr_size as $result){ ?>
<?php
$val_s1 = 0;
$val_s2 = 0;
if(!is_null($arr_amount1[$check_id]) && array_key_exists($result,$arr_amount1[$check_id])){
$val_s1 = array_sum($arr_amount1[$check_id][$result]['Receive']);
$val_s2 = array_sum($arr_amount2[$check_id][$result]['Amount']);
}
$total_s1[$result][] = $val_s1;
?>
<td align="center" bgcolor="#48CCF9">
<?=$val_s1?>
</td>
<?php } ?>
<td align="center" bgcolor="#75a3a3">total</td>
</tr>
<tr>
<td width="100" align="center">Amount </td>
<?php foreach($arr_size as $result){ ?>
<?php
$val_s1 = 0;
$val_s2 = 0;
if(!is_null($arr_amount2[$check_id]) && array_key_exists($result,$arr_amount2[$check_id])){
$val_s2 = array_sum($arr_amount2[$check_id][$result]['Amount']);
}
$total_s2[$result][] = $val_s2;
?>
<td align="center" bgcolor="#57D59A">
<?=$val_s2?>
</td>
<?php } ?>
<td align="center" bgcolor="#75a3a3">total</td>
</tr>
<?php } ?>
<tr>
<td align="center">ยอดรวม</td>
<?php foreach($arr_size as $result){ ?>
<td align="center">
<?php $sum1 =array_sum($total_s1[$result]);
$sum2 =array_sum($total_s2[$result]);
$qty = $sum1+$sum2;
echo $qty; ?>
</td>
<?php } ?>
<td align="center" bgcolor="">total</td>
</tr>
</table>
<?php } ?>
</h4>
</div>
</div>
</body>
</html>
Tag : PHP, Ms SQL Server 2014
|
|
|
|
|
|
Date :
2021-04-05 16:55:33 |
By :
panthipa |
View :
1354 |
Reply :
9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คุณใช้ php version อะไร? จะได้หาให้เหมาะ ไม่งั้นเดี๋ยวมี error หาฟังก์ชั่นไม่เจออีก
ลองดูด้วย phpinfo();
|
|
|
|
|
Date :
2021-04-05 20:37:02 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คำณวนออกมาแล้วไม่ตรงตัวอย่างนะ อย่าง 28 กับ 28 ของคุณทำไมออกมา 186 ไม่รู้อันไหนถูกกันแน่ ถ้าของคุณถูกก็อธิบายหน่อยว่าทำไมมันออกมาอย่างนั้นทั้งที่ไม่ได้เกี่่ยวกับ Product H8400000/3 เลย
แล้วก็ดู comment ในโค้ดด้วย มีอธิบายอะไรๆเอาไว้
Code (PHP)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title></title>
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/css/bootstrap.min.css">
</head>
<body>
<br>
<?php
$data_ = array(
array(
"Products" => 'H8470WS/3',
"Code" => '1538-26896',
"Size" => 'L',
"Receive" => 150,
"Amount" => 97,
"number" => 1
),
array(
"Products" => 'H8470WS/3',
"Code" => '1538-26896',
"Size" => 'M',
"Receive" => 50,
"Amount" => 20,
"number" => 2
),
array(
"Products" => 'H8470WS/3',
"Code" => '1538-26896',
"Size" => 'L',
"Receive" => 200,
"Amount" => 97,
"number" => 1
),
array(
"Products" => 'H8470WS/3',
"Code" => '1538-26896',
"Size" => 'M',
"Receive" => 200,
"Amount" => 52,
"number" => 2
),
array(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'XS',
"Receive" => 100,
"Amount" => 20,
"number" => 3,
),
array(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'XXS',
"Receive" => '100',
"Amount" => 30,
"number" => 4
),
array(
"Products" => 'H8470WS/3',
"Code" => '1538-25555',
"Size" => 'XXS',
"Receive" => 28,
"Amount" => 28,
"number" => 5
),
array(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'XL',
"Receive" => 100,
"Amount" => 20,
"number" => 3
),
array(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'XXL',
"Receive" => 100,
"Amount" => 20,
"number" => 4
),
array(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'XXXL',
"Receive" => 100,
"Amount" => 30,
"number" => 5
)
);
echo '<pre>', print_r($data_, true), '</pre>';
/*$arr_id = array();
$arr_size = array();
$arr_amount1 = array();
$arr_amount2 = array();
foreach ($data_ as $data) {
$arr_id[$data['Products']] = $data['Products']; // เป็น array 1 มิติ ค่าวนลูปแนวตั้ง
// จะกำหนด $arr_size แบบนี้ไม่ได้ เพราะมันจะมาทั้งหมด ไม่ได้แยกตาม Products มันจึงมาหมดเลย
$arr_size[$data['Size']] = $data['Size']; // เป็น array 1 มิติ ค่าวนลูปแนวนอน
// $arr_amount1 และ 2 ก็ลักษณะเดียวกัน คือมันปนมาหมดเลย กำหนดแบบนี้ไม่ได้ครับ.
$arr_amount1[$data['Products']][$data['Size']]['Receive'][] = $data['Receive'];
$arr_amount2[$data['Products']][$data['Size']]['Amount'][] = $data['Amount'];
}*/
$newDataArray = array();
$sumReceiveArray = array();
$sumAmountArray = array();
foreach ($data_ as $data) {
/*if (!array_key_exists('Receive', $newDataArray[$data['Products']]['sizes'][$data['Size']])) {
$newDataArray[$data['Products']]['sizes'][$data['Size']] = array(
'Receive' => array(),
'Amount' => array(),
);
}*/
$newDataArray[$data['Products']]['sizes'][$data['Size']]['Receive'][] = $data['Receive'];// กำหนดมันลงในตัวแปร $newDataArray เดียวเลย เพื่อให้มันไม่ต้องซ้ำซ้อน.
$newDataArray[$data['Products']]['sizes'][$data['Size']]['Amount'][] = $data['Amount'];
$newDataArray[$data['Products']]['sizes'][$data['Size']]['number'][] = $data['number'];// ไม่รู้ใช้หรือเปล่า ใส่ไว้ก่อน.
}
//echo '<pre>' . print_r($newDataArray, true) . '</pre>' . PHP_EOL;// for debug
?>
<br>
<div style="width:98%;margin:0px 0px 0px 20px;">
<div class="table-responsive">
<h4>
<?php foreach ($newDataArray as $style => $items) { ?>
<table class="table table-bordered">
<tr class="active">
<td align="center" width="150"><?= $style ?></td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
foreach ($items['sizes'] as $size => $recieveAmount) {
?>
<td align="center"><?= $size ?></td>
<?php
}
}
?>
<td align="center">ยอดรวม</td>
</tr>
<?php
$total_receive = array();
$total_amount = array();
?>
<!-- Receive -->
<tr>
<td width="100" align="center">Receive </td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
$sumReceive = 0;
foreach ($items['sizes'] as $size => $recieveAmount) {
if (is_array($recieveAmount['Receive'])) {
$sumColumn = array_sum($recieveAmount['Receive']);
} else {
$sumColumn = $recieveAmount['Receive'];
}
$sumReceive = ($sumReceive + $sumColumn);
$sumReceiveArray[$size] = $sumColumn;
?>
<td align="center" bgcolor="#48CCF9">
<?= $sumColumn ?>
</td>
<?php
}
}
?>
<td align="center" bgcolor="#75a3a3"><?=$sumReceive?></td>
</tr>
<tr>
<td width="100" align="center">Amount </td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
$sumAmount = 0;
foreach ($items['sizes'] as $size => $recieveAmount) {
if (is_array($recieveAmount['Amount'])) {
$sumColumn = array_sum($recieveAmount['Amount']);
} else {
$sumColumn = $recieveAmount['Amount'];
}
$sumAmount = ($sumAmount + $sumColumn);
$sumAmountArray[$size] = $sumColumn;
?>
<td align="center" bgcolor="#57D59A">
<?= $sumColumn ?>
</td>
<?php
}
}
?>
<td align="center" bgcolor="#75a3a3"><?=$sumAmount?></td>
</tr>
<tr>
<td align="center">ยอดรวม</td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
$sumTotal = 0;
foreach ($items['sizes'] as $size => $recieveAmount) {
$sumQty = 0;
if (array_key_exists($size, $sumReceiveArray)) {
$sumQty = ($sumQty + $sumReceiveArray[$size]);
}
if (array_key_exists($size, $sumAmountArray)) {
$sumQty = ($sumQty + $sumAmountArray[$size]);
}
$sumTotal = ($sumTotal + $sumQty);
?>
<td align="center">
<?=$sumQty?>
</td>
<?php
}
}
?>
<td align="center" bgcolor=""><?=$sumTotal?></td>
</tr>
</table>
<?php } ?>
</h4>
</div>
</div>
</body>
</html>
|
ประวัติการแก้ไข 2021-04-05 21:42:21
|
|
|
|
Date :
2021-04-05 21:41:05 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าข้อมูล Order เหมือนกับ Receive ก็ก๊อป Array เอาเลยก็ได้นี่
$newDataArray[$data['Products']]['sizes'][$data['Size']]['Order'][] = $data['Receive'];
แล้วในการวนแสดงคำณวนข้อมูลในตารางก็ลอกเอาจาก Receive แต่เปลี่ยนค่าเป็น Order โดยทำความเข้าใจโค้ดก่อนแล้วเปลี่ยนตาม
|
|
|
|
|
Date :
2021-04-06 15:59:34 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ก็ใช้หลักการเดิมก็ได้มั้ง?
ไม่เห็นโครงสร้าง ถ้าคล้ายๆเดิมก็ทำหลักการแบบเดิม
$newDataArray[$data['Products']]['sizes'][$data['Size']]['Order'][] = ค่าของ order
แบบนี้มันก็เก็บจำนวน order แต่ละรอบลง array
แล้วก็เพิ่ม $sumOrderArray = array(); ต่อจากพวกที่อยู่ข้างบน
ส่วนของตารางก็เพิ่มเข้าไปก่อน receive
Code (PHP)
<tr>
<td width="100" align="center">Order </td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
$sumOrder = 0;
foreach ($items['sizes'] as $size => $orderAmount) {
if (is_array($orderAmount['Order'])) {
$sumColumn = array_sum($orderAmount['Order']);
} else {
$sumColumn = $orderAmount['Order'];
}
$sumOrder = ($sumOrder + $sumColumn);
$sumOrderArray[$size] = $sumColumn;
?>
<td align="center" bgcolor="#48CCF9">
<?= $sumColumn ?>
</td>
<?php
}
}
?>
<td align="center" bgcolor="#75a3a3"><?=$sumOrder?></td>
</tr>
ส่วนของยอดตารางรวมก็เพิ่มนี่เข้าไป
Code (PHP)
if (array_key_exists($size, $sumOrderArray)) {
$sumQty = ($sumQty + $sumOrderArray[$size]);
}
แบบนี้ได้มั้ย?
|
|
|
|
|
Date :
2021-04-06 18:40:51 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 7 เขียนโดย : mr.v เมื่อวันที่ 2021-04-06 18:40:51
รายละเอียดของการตอบ ::
ขอบคุณมากคะ Code ที่พี่ให้มาตอนแรกในส่วนนี้ปรับเรียบร้อยแล้วคะ แต่ตอนปัญหา database อยู่คนละเครื่อง หนูใช้วิธีดึงข้อมูลที่มีการอัพเดทวันละ 2 รอบคะช่วงเช้ากับเที่ยงก็น่าจะพอใช้ได้ แต่ยังติดการดึงข้อมูลกล่องที่มันซ้ำกันคะ เช่นกล่องมี PSD02, PSD04 คือแสดงแค่ PSD02
Code (SQL)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title></title>
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/css/bootstrap.min.css">
</head>
<body>
<?php
$data_ = array(
array(
"Products" => 'H8470WS/3',
"Code" => '1538-26896',
"Size" => 'L',
"Box" => "PSD04",
"Order" => 150,
"Receive" => 150,
"Amount" => 97,
"number" => 1
),
array(
"Products" => 'H8470WS/3',
"Code" => '1538-26896',
"Size" => 'M',
"Box" => "PSD04",
"Order" => 50,
"Receive" => 50,
"Amount" => 20,
"number" => 2
),
array(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'XS',
"Box" => "PSD02",
"Order" => 100,
"Receive" => 100,
"Amount" => 20,
"number" => 3,
),
array(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'XXS',
"Box" => "PSD02",
"Order" => 100,
"Receive" => 100,
"Amount" => 30,
"number" => 4
),
array(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'M',
"Box" => "PSD02",
"Order" => 100,
"Receive" => 100,
"Amount" => 20,
"number" => 3,
),
array(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'L',
"Box" => "PSD02",
"Order" => 100,
"Receive" => 100,
"Amount" => 30,
"number" => 4
)
);
// echo '<pre>', print_r($data_, true), '</pre>';
/*$arr_id = array();
$arr_size = array();
$arr_amount1 = array();
$arr_amount2 = array();
foreach ($data_ as $data) {
$arr_id[$data['Products']] = $data['Products']; // เป็น array 1 มิติ ค่าวนลูปแนวตั้ง
// จะกำหนด $arr_size แบบนี้ไม่ได้ เพราะมันจะมาทั้งหมด ไม่ได้แยกตาม Products มันจึงมาหมดเลย
$arr_size[$data['Size']] = $data['Size']; // เป็น array 1 มิติ ค่าวนลูปแนวนอน
// $arr_amount1 และ 2 ก็ลักษณะเดียวกัน คือมันปนมาหมดเลย กำหนดแบบนี้ไม่ได้ครับ.
$arr_amount1[$data['Products']][$data['Size']]['Receive'][] = $data['Receive'];
$arr_amount2[$data['Products']][$data['Size']]['Amount'][] = $data['Amount'];
}*/
$newDataArray = array();
$sumOrderArray = array();
$sumReceiveArray = array();
$sumAmountArray = array();
foreach ($data_ as $data) {
$newDataArray[$data['Products']]['sizes'][$data['Size']]['Order'][] = $data['Order'];// กำหนดมันลงในตัวแปร $newDataArray เดียวเลย เพื่อให้มันไม่ต้องซ้ำซ้อน.
$newDataArray[$data['Products']]['sizes'][$data['Size']]['Receive'][] = $data['Receive'];
$newDataArray[$data['Products']]['sizes'][$data['Size']]['Amount'][] = $data['Amount'];
$newDataArray2[$data['Products']]['sizes'][$data['Size']]['Box'][] = $data['Box'];
$newDataArray[$data['Products']]['sizes'][$data['Size']]['number'][] = $data['number'];// ไม่รู้ใช้หรือเปล่า ใส่ไว้ก่อน.
}
//echo '<pre>' . print_r($newDataArray, true) . '</pre>' . PHP_EOL;// for debug
?>
<br>
<div style="width:98%;margin:0px 0px 0px 20px;">
<h4>ข้อมูลการนำเข้าสินค้า</p></h4>
<div class="table-responsive">
<h4>
<?php foreach ($newDataArray as $style => $items) { ?>
<table class="table table-bordered">
<tr class="active">
<td align="center" width="150"><?= $style ?></td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
foreach ($items['sizes'] as $size => $recieveAmount) {
?>
<td align="center"><?= $size ?></td>
<?php
}
}
?>
<td align="center">ยอดรวม</td>
</tr>
<?php
$total_order = array();
$total_receive = array();
$total_amount = array();
?>
<tr>
<td width="100" align="center">Order/<?php echo $data['Box'];?></td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
$sumOrder = 0;
foreach ($items['sizes'] as $size => $recieveAmount) {
if (is_array($recieveAmount['Order'])) {
$sumColumn = array_sum($recieveAmount['Order']);
} else {
$sumColumn = $recieveAmount['Order'];
}
$sumOrder = ($sumOrder + $sumColumn);
$sumOrderArray[$size] = $sumColumn;
?>
<td align="center" bgcolor="#48CCF9">
<?= $sumColumn ?>
</td>
<?php
}
}
?>
<td align="center" bgcolor="#75a3a3"><?=$sumOrder?></td>
</tr>
<tr>
<td width="100" align="center">Receive </td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
$sumReceive = 0;
foreach ($items['sizes'] as $size => $recieveAmount) {
if (is_array($recieveAmount['Receive'])) {
$sumColumn = array_sum($recieveAmount['Receive']);
} else {
$sumColumn = $recieveAmount['Receive'];
}
$sumReceive = ($sumReceive + $sumColumn);
$sumReceiveArray[$size] = $sumColumn;
?>
<td align="center" bgcolor="#48CCF9">
<?= $sumColumn ?>
</td>
<?php
}
}
?>
<td align="center" bgcolor="#75a3a3"><?=$sumReceive?></td>
</tr>
<tr>
<td width="100" align="center">Amount </td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
$sumAmount = 0;
foreach ($items['sizes'] as $size => $recieveAmount) {
if (is_array($recieveAmount['Amount'])) {
$sumColumn = array_sum($recieveAmount['Amount']);
} else {
$sumColumn = $recieveAmount['Amount'];
}
$sumAmount = ($sumAmount + $sumColumn);
$sumAmountArray[$size] = $sumColumn;
?>
<td align="center" bgcolor="#57D59A">
<?= $sumColumn ?>
</td>
<?php
}
}
?>
<td align="center" bgcolor="#75a3a3"><?=$sumAmount?></td>
</tr>
</table>
<?php } ?>
</h4>
</div>
</div>
</body>
</html>
|
|
|
|
|
Date :
2021-04-07 21:02:55 |
By :
panthipa |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ชักจะงงๆแล้ว ทำไมตารางแหว่งไปแหว่งมา ตอนทำไปให้มันมีรายการแนวนอนยอดรวมด้วย
แล้วค่ากล่องไปสร้างตัวแปร array ขึ้นมาใหม่อีก $newDataArray2 แต่ก็ไม่ใช้. สร้างไปทำไมกัน? เปลืองแรมเปล่าๆ...
แล้วข้อมูลกล่องนี่คือ แต่ละรหัสสินค้า Hxxxxxx....อะไรนี่ จะมีเลขชื่อกล่องชื่อเดียวใช่มั้ย? ถ้าใช่ก็ใช้ตามนี้เลย
Code (PHP)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title></title>
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/css/bootstrap.min.css">
</head>
<body>
<?php
$data_ = array(
array(
"Products" => 'H8470WS/3',
"Code" => '1538-26896',
"Size" => 'L',
"Box" => "PSD04",
"Order" => 150,
"Receive" => 150,
"Amount" => 97,
"number" => 1
),
array(
"Products" => 'H8470WS/3',
"Code" => '1538-26896',
"Size" => 'M',
"Box" => "PSD04",
"Order" => 50,
"Receive" => 50,
"Amount" => 20,
"number" => 2
),
array(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'XS',
"Box" => "PSD02",
"Order" => 100,
"Receive" => 100,
"Amount" => 20,
"number" => 3,
),
array(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'XXS',
"Box" => "PSD02",
"Order" => 100,
"Receive" => 100,
"Amount" => 30,
"number" => 4
),
array(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'M',
"Box" => "PSD02",
"Order" => 100,
"Receive" => 100,
"Amount" => 20,
"number" => 3,
),
array(
"Products" => 'H8400000/3',
"Code" => '1538-20000',
"Size" => 'L',
"Box" => "PSD02",
"Order" => 100,
"Receive" => 100,
"Amount" => 30,
"number" => 4
)
);
// echo '<pre>', print_r($data_, true), '</pre>';
/*$arr_id = array();
$arr_size = array();
$arr_amount1 = array();
$arr_amount2 = array();
foreach ($data_ as $data) {
$arr_id[$data['Products']] = $data['Products']; // เป็น array 1 มิติ ค่าวนลูปแนวตั้ง
// จะกำหนด $arr_size แบบนี้ไม่ได้ เพราะมันจะมาทั้งหมด ไม่ได้แยกตาม Products มันจึงมาหมดเลย
$arr_size[$data['Size']] = $data['Size']; // เป็น array 1 มิติ ค่าวนลูปแนวนอน
// $arr_amount1 และ 2 ก็ลักษณะเดียวกัน คือมันปนมาหมดเลย กำหนดแบบนี้ไม่ได้ครับ.
$arr_amount1[$data['Products']][$data['Size']]['Receive'][] = $data['Receive'];
$arr_amount2[$data['Products']][$data['Size']]['Amount'][] = $data['Amount'];
}*/
$newDataArray = array();
$sumOrderArray = array();
$sumReceiveArray = array();
$sumAmountArray = array();
foreach ($data_ as $data) {
$newDataArray[$data['Products']]['sizes'][$data['Size']]['Order'][] = $data['Order'];// กำหนดมันลงในตัวแปร $newDataArray เดียวเลย เพื่อให้มันไม่ต้องซ้ำซ้อน.
$newDataArray[$data['Products']]['sizes'][$data['Size']]['Receive'][] = $data['Receive'];
$newDataArray[$data['Products']]['sizes'][$data['Size']]['Amount'][] = $data['Amount'];
$newDataArray[$data['Products']]['Box'] = $data['Box'];
$newDataArray[$data['Products']]['sizes'][$data['Size']]['number'][] = $data['number'];// ไม่รู้ใช้หรือเปล่า ใส่ไว้ก่อน.
}
//echo '<pre>' . print_r($newDataArray, true) . '</pre>' . PHP_EOL;// for debug
?>
<br>
<div style="width:98%;margin:0px 0px 0px 20px;">
<h4>ข้อมูลการนำเข้าสินค้า</p></h4>
<div class="table-responsive">
<h4>
<?php foreach ($newDataArray as $style => $items) { ?>
<table class="table table-bordered">
<tr class="active">
<td align="center" width="150"><?= $style ?></td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
foreach ($items['sizes'] as $size => $recieveAmount) {
?>
<td align="center"><?= $size ?></td>
<?php
}
}
?>
<td align="center">ยอดรวม</td>
</tr>
<?php
/*$total_order = array();
$total_receive = array();
$total_amount = array();*/// ไม่ได้ใช้เลย เอาออกไปก็ได้.
?>
<tr>
<td width="100" align="center">Order/<?php echo $items['Box'];?></td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
$sumOrder = 0;
foreach ($items['sizes'] as $size => $recieveAmount) {
if (is_array($recieveAmount['Order'])) {
$sumColumn = array_sum($recieveAmount['Order']);
} else {
$sumColumn = $recieveAmount['Order'];
}
$sumOrder = ($sumOrder + $sumColumn);
$sumOrderArray[$size] = $sumColumn;
?>
<td align="center" bgcolor="#48CCF9">
<?= $sumColumn ?>
</td>
<?php
}
}
?>
<td align="center" bgcolor="#75a3a3"><?=$sumOrder?></td>
</tr>
<tr>
<td width="100" align="center">Receive </td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
$sumReceive = 0;
foreach ($items['sizes'] as $size => $recieveAmount) {
if (is_array($recieveAmount['Receive'])) {
$sumColumn = array_sum($recieveAmount['Receive']);
} else {
$sumColumn = $recieveAmount['Receive'];
}
$sumReceive = ($sumReceive + $sumColumn);
$sumReceiveArray[$size] = $sumColumn;
?>
<td align="center" bgcolor="#48CCF9">
<?= $sumColumn ?>
</td>
<?php
}
}
?>
<td align="center" bgcolor="#75a3a3"><?=$sumReceive?></td>
</tr>
<tr>
<td width="100" align="center">Amount </td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
$sumAmount = 0;
foreach ($items['sizes'] as $size => $recieveAmount) {
if (is_array($recieveAmount['Amount'])) {
$sumColumn = array_sum($recieveAmount['Amount']);
} else {
$sumColumn = $recieveAmount['Amount'];
}
$sumAmount = ($sumAmount + $sumColumn);
$sumAmountArray[$size] = $sumColumn;
?>
<td align="center" bgcolor="#57D59A">
<?= $sumColumn ?>
</td>
<?php
}
}
?>
<td align="center" bgcolor="#75a3a3"><?=$sumAmount?></td>
</tr>
</table>
<?php } ?>
</h4>
</div>
</div>
</body>
</html>
ข้อมูลพวกนี้ ควรสร้างตัวอย่างขึ้นมา โดยมีรูปแบบที่มันจะ"เป็นไปได้"ในลักษณะต่างๆทั้งหมดมายำรวม เช่น แต่ละรายการมีค่าอะไรที่ต่าง ค่าอะไรที่ซ้ำ ควรรวมกันเพื่อแสดงผล อะไรอย่างนี้
แล้วจากนั้นจึง loop จัดรูปแบบของ array ขึ้นมาใหม่
ตรงโค้ดที่ผมลองเขียนน่ะ echo '<pre>' . print_r($newDataArray, true) . '</pre>' . PHP_EOL; อันนี้คือเอามากางดูให้เห็นด้วยตัวเองว่าโครงสร้างมันเป็นยังไงก่อน เราจะวน loop ในลักษณะที่ต้องการจากรูปแบบนี้ได้ไหม ก็แก้ไขไปจนกว่ามันจะได้รูปแบบที่เรา"จะต้องใช้" จากนั้นจึงค่อยขยับไปเล่นกับตาราง
เรียกว่าทำความเข้าใจไปทีละขั้น ไม่อย่างนั้นมันจะงงพอๆกับเดินในเขาวงกต
ลองดูว่าล่าสุดมันใช่มั้ย เพราะถ้าหาก 1 รหัสสินค้า Hxxxx มันมีเลขกล่องที่ไม่ซ้ำกันได้ ก็จะต้องไปอีกรูปแบบหนึ่ง อันนี้ก็ใช้ไม่ได้แล้ว (ข้างบนจึงบอกว่าต้องเอารูปแบบที่มันจะเป็นไปได้มายำรวมไปเลย จะได้สร้างรูปแบบ array ใหม่ให้ตรงต้องการที่สุด)
|
|
|
|
|
Date :
2021-04-07 21:59:11 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 9 เขียนโดย : mr.v เมื่อวันที่ 2021-04-07 21:59:11
รายละเอียดของการตอบ ::
ขอขอบคุณพี่มากเลยคะ ขอบคุณจริงๆ คะ หนูจะพยายามกลับไปทบทวน code ที่พี่ช่วยเหลือและเรื่องของ array เผื่อจำเป็นต้องงานอีก
อันนี้คือ Code ที่ใช้งานในรีพอร์ตนี้คะ
Code (PHP)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title></title>
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/css/bootstrap.min.css">
</head>
<body>
<?php
date_default_timezone_set("Asia/Bangkok");
ini_set('display_errors', 1);
error_reporting(~0);
$serverName_ = "x.xxx.xxx.xx";
$userName_ = "xxxxxx";
$userPassword_ = "xxxxxxxx";
$dbName_ = "Purchase";
try {
$conn_ = new PDO("sqlsrv:server=$serverName_ ; Database = $dbName_", $userName_, $userPassword_);
$conn_->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn_->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_UTF8);
if($conn_)
{
//echo "Database Connected.";
}
else
{
echo "Database Connected Failed.";
}
}
catch(PDOException $e) {
//echo $e->getMessage();
echo "<h3>ไม่สามารถเชื่อมต่อระบบได้</h3>";
}
$search = isset($_GET['searchStyle']) ? $_GET['searchStyle'] : '';
$load_ = $conn_->prepare("SELECT TOP(200)Tb_Order.Style, Tb_Order.Order, Tb_Order.Customer, Tb_Order.Product, Tb_Load.Style, Tb_Load.Code, Tb_Load.Size, Tb_Load.Color,
Tb_Load.Receive, Tb_Load.Amount, Tb_Load.Box, Tb_Load.Truck, Tb_Load.Departure, Tb_Check_Delivery.Name, Tb_Check_Delivery.Style, Tb_Check_Delivery.Box, GETDATE() AS toDay
FROM Tb_Order INNER JOIN Tb_Load ON Tb_Order.Style = Tb_Load.Style INNER JOIN Tb_Check_Delivery ON Tb_Load.Style = Tb_Check_Delivery.Style COLLATE Thai_100_CI_AS
WHERE Tb_Load.Style LIKE '%".$search."%' ORDER BY Tb_Load.LDate DESC");
$load->execute();
$data_ = array();
while($result_ = $load_->fetch(PDO::FETCH_ASSOC)){
$data_[] = $result_;
}
$load_ = null;
// echo '<pre>', print_r($data_, true), '</pre>';
$newDataArray = array();
$sumOrderArray = array();
$sumReceiveArray = array();
$sumAmountArray = array();
foreach ($data_ as $data) {
$newDataArray[$data['Products']]['sizes'][$data['Size']]['Order'][] = $data['Order'];// กำหนดมันลงในตัวแปร $newDataArray เดียวเลย เพื่อให้มันไม่ต้องซ้ำซ้อน.
$newDataArray[$data['Products']]['sizes'][$data['Size']]['Receive'][] = $data['Receive'];
$newDataArray[$data['Products']]['sizes'][$data['Size']]['Amount'][] = $data['Amount'];
$newDataArray[$data['Products']]['Box'] = $data['Box'];
}
//echo '<pre>' . print_r($newDataArray, true) . '</pre>' . PHP_EOL;// for debug
?>
<br>
<div style="width:98%;margin:0px 0px 0px 20px;">
<h4>ข้อมูลการนำเข้าสินค้า</p></h4>
<div class="table-responsive">
<h4>
<?php foreach ($newDataArray as $style => $items) { ?>
<table class="table table-bordered">
<tr class="active">
<td align="center" width="150"><?= $style ?></td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
foreach ($items['sizes'] as $size => $recieveAmount) {
?>
<td align="center"><?= $size ?></td>
<?php
}
}
?>
<td align="center">ยอดรวม</td>
</tr>
<tr>
<td width="100" align="center">Order/<?php echo $items['Box'];?></td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
$sumOrder = 0;
foreach ($items['sizes'] as $size => $recieveAmount) {
if (is_array($recieveAmount['Order'])) {
$sumColumn = array_sum($recieveAmount['Order']);
} else {
$sumColumn = $recieveAmount['Order'];
}
$sumOrder = ($sumOrder + $sumColumn);
$sumOrderArray[$size] = $sumColumn;
?>
<td align="center" bgcolor="#48CCF9">
<?= $sumColumn ?>
</td>
<?php
}
}
?>
<td align="center" bgcolor="#75a3a3"><?=$sumOrder?></td>
</tr>
<tr>
<td width="100" align="center">Receive </td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
$sumReceive = 0;
foreach ($items['sizes'] as $size => $recieveAmount) {
if (is_array($recieveAmount['Receive'])) {
$sumColumn = array_sum($recieveAmount['Receive']);
} else {
$sumColumn = $recieveAmount['Receive'];
}
$sumReceive = ($sumReceive + $sumColumn);
$sumReceiveArray[$size] = $sumColumn;
?>
<td align="center" bgcolor="#48CCF9">
<?= $sumColumn ?>
</td>
<?php
}
}
?>
<td align="center" bgcolor="#75a3a3"><?=$sumReceive?></td>
</tr>
<tr>
<td width="100" align="center">Amount </td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
$sumAmount = 0;
foreach ($items['sizes'] as $size => $recieveAmount) {
if (is_array($recieveAmount['Amount'])) {
$sumColumn = array_sum($recieveAmount['Amount']);
} else {
$sumColumn = $recieveAmount['Amount'];
}
$sumAmount = ($sumAmount + $sumColumn);
$sumAmountArray[$size] = $sumColumn;
?>
<td align="center" bgcolor="#57D59A">
<?= $sumColumn ?>
</td>
<?php
}
}
?>
<td align="center" bgcolor="#75a3a3"><?=$sumAmount?></td>
</tr>
<!-- // กรณีต้องการแสดงยอดรวมท้ายตาราง
<tr>
<td align="center">ยอดรวม</td>
<?php
if (isset($items['sizes']) && is_array($items['sizes'])) {
$sumTotal = 0;
foreach ($items['sizes'] as $Bind_Size => $recieveAmount) {
$sumQty = 0;
if (array_key_exists($Bind_Size, $sumBindArray)) {
$sumQty = ($sumQty + $sumBindArray[$Bind_Size]);
}
if (array_key_exists($Bind_Size, $sumAmountArray)) {
$sumQty = ($sumQty + $sumAmountArray[$Bind_Size]);
}
if (array_key_exists($Bind_Size, $sumQtyArray)) {
$sumQty = ($sumQty + $sumQtyArray[$Bind_Size]);
}
$sumTotal = ($sumTotal + $sumQty);
?>
<td align="center"><?=$sumQty?></td>
<?php
}
}
?>
<td align="center" bgcolor=""><?=$sumTotal?></td>
</tr>
-->
</table>
<?php } ?>
</h4>
</div>
</div>
</body>
</html>
|
ประวัติการแก้ไข 2021-04-08 10:38:49
|
|
|
|
Date :
2021-04-08 10:33:33 |
By :
panthipa |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|