Heim >Backend-Entwicklung >PHP-Tutorial >求一填值效果

求一填值效果

WBOY
WBOYOriginal
2016-06-23 14:14:40981Durchsuche

本帖最后由 lazygc520 于 2013-06-28 17:35:24 编辑

图片如下:


能否达到如图所示的效果,例如当总数量为240时,紫色的第一个单元格为120,第二个单元格为240-120=120。
图中关系如下:

一个stockno对应多个行,图中为两行。如果是一个页面对应多个stockno,则$arrs对应的count总数,去除掉赋给第一个stockno的count值,剩余的值赋给接下来的stockno对应的紫色框中的值。

所示代码如下:
<?php	$sql = "select DISTINCT b.packageno,a.stock_no from `stock_detail` as a,`kw_manage` as b where a.stock_no = '".$stockno[$j-1]."' and a.cust_no = replace( b.cust_no, ' ', '' )";//	echo $sql.'<br />';	$result = mysql_query($sql);	$res = array(); 	while($row = mysql_fetch_array($result,MYSQL_ASSOC))	{		$sql2 = "select lotno,count(lotno) from `vp_barcode_2d_y` where packageno = '".$row['packageno']."' group by lotno,packageno order by lotno asc";//		echo $sql2.'<br />';		$result2 = mysql_query($sql2);		$var = array();		while($row2 = mysql_fetch_array($result2,MYSQL_NUM))		{			if(isset($res[$row2[0]])) 			$res[$row2[0]]['count'] += $row2[1];			else 			$res[$row2[0]] = array('lotno'=>$row2[0],'count'=>$row2[1]);		}	}	ksort($res);	$arrs = array();	foreach($res as $v2)	{		$arrs[] = $v2;	}	print_r($arrs);//Array ( [0] => Array ( [lotno] => 3207 [count] => 240 ) ) 		$sql4 = "select arr_time,c_type,cust_no,snp,mount,mount*snp as m_total from `".$t."` where stock_no = '".$stockno[$j-1]."'";	$result4 = mysql_query($sql4);	$a = array();	while($var = mysql_fetch_array($result4,MYSQL_NUM))	{		$a[] = $var;	}foreach($a as $k=>$v)//显示一个stockno对应的两行结果{	echo '	<tr height="56" style="height: 42.0pt">		<td>		'.($k+1).'</td>';?>		<td>		<?php			echo $v['0'];		?></td>		<td>		<?php			echo $v['1'];		?></td>		<td>		<?php			echo $v['2'];		?></td>		<td>		<?php			$sql = "select type from `kw_info` where cust_no = '".$v['2']."'";			$result = mysql_query($sql);			$row = mysql_fetch_array($result,MYSQL_ASSOC);			echo $row['type'];		?></td>		<td>		<?php			echo $v['3'];		?></td>		<td>		<?php			echo $v['4'];		?></td>		<td>		<?php			if(($arr_mount[$j-1]['mount']%$kx) != 0 )				echo $kx-($arr_mount[$j-1]['mount']%$kx);			else				echo '0';		?></td>		<td>		<?php			echo $v['5'];			echo '</td>';		echo '<td>';  			//需加入的代码部分;		echo '</td>';		echo '		<td>		 </td>		<td>		 </td>		<td> </td>	</tr>';}?>

回复讨论(解决方案)

简单的if不能解决?

循环太多,绕晕了。

这个时候smarty就显现出了强大的一面

在线等方案。。。

是不是我没有描述的不清楚?怎么没人回?

逻辑结构:

一个页面中stockno对应多个值,该值为代码中对应的$stockno[$j-1]

每个stockno为对应的值时,对应数据库中对应的行。见代码29行。

对应行中的图中零件号码(cust_no)的总数结果在代码26行求得。(1-26行求得零件号码的总数)

接下来就是零件号码数量的分配问题,我想问的就是这个分配的问题。

当stockno为对应的值时,带出该值对应的结果(例如图中两行结果),此两行结果的零件号码数量分别为120和135,对应代码36行foreach循环中的$v['5'];(代码79行),已知该零件号码的总数量为240,见代码第26行。

假设对应的零件号码总数量为360,那么图中对应的零件号码数量为120的对应紫色框中应填入3207 * 120,数量为135的对应紫框中应填入3207 * 135,余下的数量值带入stockno的下一个值。请问这个怎么实现?

谢谢!

你参与输出的数据是分别处理得到的
如何知道他们的对应关系?

你参与输出的数据是分别处理得到的
如何知道他们的对应关系?

stockno和cust_no(零件号码)是通过表`stock_detail`对应的,一对一或者一对多的关系。

cust_no(零件号码) 的数量是 通过 库存表`kw_manage` 得到的,求得该cust_no对应的库存总量。

再依据该cust_no的库存总量来分配对应的stockno对应的cust_no(零件号码)的数量。 

你最好贴出测试数据!

你最好贴出测试数据!
代码第26行
print_r($arrs);//求得该cust_no对应的库存总量

Array ( [0] => Array ( [lotno] => 3207 [count] => 240 ) ) 

代码第34行
print_r($a);//结果是stockno和cust_no的对应关系,此例中是1对2的关系

Array([0]=>Array([0]=>2013-05-13 09:00:00 [1]=>L11K [2]=>23703EX80A [3]=>15 [4]=>8 [5]=>120) [1]=>Array([0]=>2013-05-13 09:00:00 [1]=>L11K [2]=>23703EX80A [3]=>15 [4]=>9 [5]=>135)

例中可能第二项的结果不满足(实际情况中不可能出现这种情况,若出现,则提示数量不够),则出现3207 * 120 (240-第一项的120),然后是其他的情况来补足,如 3207 * 120 
 3209 * 15。

#9的数据不够全面,我重新贴一个。

代码第26行
print_r($arrs);//求得该cust_no对应的库存总量

Array ( [0] => Array ( [lotno] => 3207 [count] => 240 ) [1] => Array ( [lotno] => 3209 [count] => 165 ) [2] => Array ( [lotno] => 3210 [count] => 360 )) 

代码第34行
print_r($a);//结果是stockno和cust_no的对应关系,此例中是1对2的关系

当stockno = 1时:
Array([0]=>Array([0]=>2013-05-13 09:00:00 [1]=>L11K [2]=>23703EX80A [3]=>15 [4]=>8 [5]=>120) [1]=>Array([0]=>2013-05-13 09:00:00 [1]=>L11K [2]=>23703EX80A [3]=>15 [4]=>9 [5]=>135))

当stockno = 2时:
Array([0]=>Array([0]=>2013-05-13 09:00:00 [1]=>L11K [2]=>23703EX80A [3]=>15 [4]=>10 [5]=>150) [1]=>Array([0]=>2013-05-13 09:00:00 [1]=>L11K [2]=>23703EX80A [3]=>15 [4]=>10 [5]=>150))

....依次类推

应该得到的结果:
当stockno = 1时:

紫色第一行: 3207 * 120

紫色第二行: 3207 * 120
3209 * 15

当stockno = 2时:

紫色第一行: 3209 * 150

紫色第二行: 3210 * 150

....依次类推至stockno = n 。

像这样的结果。

这样?

$arrs = Array (  0 => Array ( 'lotno' => 3207, 'count' => 240 ),  1 => Array ( 'lotno' => 3209, 'count' => 165 ),  2 => Array ( 'lotno' => 3210, 'count' => 360 ),);$a = Array(  0 => Array(0 => '2013-05-13 09:00:00', 1 => 'L11K', 2 => '23703EX80A', 3 => 15, 4 => 8, 5 => 120),  1 => Array(0 => '2013-05-13 09:00:00', 1 => 'L11K', 2 => '23703EX80A', 3 => 15, 4 => 9, 5 => 135),  2 => Array(0 => '2013-05-13 09:00:00', 1 => 'L11K', 2 => '23703EX80A', 3 => 15, 4=> 10, 5 => 150),  3 => Array(0 => '2013-05-13 09:00:00', 1 => 'L11K', 2 => '23703EX80A', 3 => 15, 4=> 10, 5 => 150),);
两组数据不对等,如何知道 stockno 谁是谁?

这样?

$arrs = Array (  0 => Array ( 'lotno' => 3207, 'count' => 240 ),  1 => Array ( 'lotno' => 3209, 'count' => 165 ),  2 => Array ( 'lotno' => 3210, 'count' => 360 ),);$a = Array(  0 => Array(0 => '2013-05-13 09:00:00', 1 => 'L11K', 2 => '23703EX80A', 3 => 15, 4 => 8, 5 => 120),  1 => Array(0 => '2013-05-13 09:00:00', 1 => 'L11K', 2 => '23703EX80A', 3 => 15, 4 => 9, 5 => 135),  2 => Array(0 => '2013-05-13 09:00:00', 1 => 'L11K', 2 => '23703EX80A', 3 => 15, 4=> 10, 5 => 150),  3 => Array(0 => '2013-05-13 09:00:00', 1 => 'L11K', 2 => '23703EX80A', 3 => 15, 4=> 10, 5 => 150),);
两组数据不对等,如何知道 stockno 谁是谁?

原来的情况是这样的,
$stockno = explode(","$_GET['stockno']);
for($j = 0;$j {
    //将1#代码放入此循环中;
}

能不能把数据看成这样?

$arrs = Array (  0 => Array ( 'lotno' => 3207, 'count' => 240 ),  1 => Array ( 'lotno' => 3209, 'count' => 165 ),  2 => Array ( 'lotno' => 3210, 'count' => 360 ),);$a = Array(stockno1 =>Array(  0 => Array(0 => '2013-05-13 09:00:00', 1 => 'L11K', 2 => '23703EX80A', 3 => 15, 4 => 8, 5 => 120))  1 => Array(0 => '2013-05-13 09:00:00', 1 => 'L11K', 2 => '23703EX80A', 3 => 15, 4 => 9, 5 => 135))), Array(stockno2 =>Array(0 => Array(0 => '2013-05-13 09:00:00', 1 => 'L11K', 2 => '23703EX80A', 3 => 15, 4=> 10, 5 => 150),  1 => Array(0 => '2013-05-13 09:00:00', 1 => 'L11K', 2 => '23703EX80A', 3 => 15, 4=> 10, 5 => 150)));


这样?

$arrs = Array (  0 => Array ( 'lotno' => 3207, 'count' => 240 ),  1 => Array ( 'lotno' => 3209, 'count' => 165 ),  2 => Array ( 'lotno' => 3210, 'count' => 360 ),);$a = Array(  0 => Array(0 => '2013-05-13 09:00:00', 1 => 'L11K', 2 => '23703EX80A', 3 => 15, 4 => 8, 5 => 120),  1 => Array(0 => '2013-05-13 09:00:00', 1 => 'L11K', 2 => '23703EX80A', 3 => 15, 4 => 9, 5 => 135),  2 => Array(0 => '2013-05-13 09:00:00', 1 => 'L11K', 2 => '23703EX80A', 3 => 15, 4=> 10, 5 => 150),  3 => Array(0 => '2013-05-13 09:00:00', 1 => 'L11K', 2 => '23703EX80A', 3 => 15, 4=> 10, 5 => 150),);
两组数据不对等,如何知道 stockno 谁是谁?

或者这样:
$arrs = Array (  0 => Array ( 'lotno' => 3207, 'count' => 240 ),  1 => Array ( 'lotno' => 3209, 'count' => 165 ),  2 => Array ( 'lotno' => 3210, 'count' => 360 ),);$a = Array(stockno1 =>Array(0 => Array(5 => 120),1 => Array(5 => 135)), Array(stockno2 =>Array(0 => Array(5 => 150),1 => Array(5 => 150)));

贴错了,

$arrs = Array (  0 => Array ( 'lotno' => 3207, 'count' => 240 ),  1 => Array ( 'lotno' => 3209, 'count' => 165 ),  2 => Array ( 'lotno' => 3210, 'count' => 360 ),);$a = Array(stockno1 =>Array(0 => Array(5 => 120),1 => Array(5 => 135)),stockno2 =>Array(0 => Array(5 => 150),1 => Array(5 => 150)));

你根据什么能把这两组数据关联在一起?

比如现在读到 $a['stockno1'][1][5],如何知道对应的应该是 $arrs[0] 还是 $arrs[1] 或者是 $arrs[2] ?

你根据什么能把这两组数据关联在一起?

比如现在读到 $a['stockno1'][1][5],如何知道对应的应该是 $arrs[0] 还是 $arrs[1] 或者是 $arrs[2] ?

程序中是这样关联的。首先得到stockno的值,再求得对应的cust_no,通过cust_no求得对应的lotno的总数量。
代码2-26行有体现。至于怎么将$arrs和$a相关联,能不能这样,将求得的stockno的结果排序,然后将$arrs按排序的结果赋给$a?

stockno的排序代码:

$sql = "select count(*) from (select stock_no,count(stock_no) from `".$t."` where adress like 'A%' group by stock_no) as temp";$result = mysql_query($sql);$row = mysql_fetch_array($result);$sql2 = "SELECT stock_no FROM `stock_detail` WHERE adress LIKE 'A%' GROUP BY stock_no ORDER BY adress, arr_time, c_type ASC";$result2 = mysql_query($sql2);$var = array();while($row1 = mysql_fetch_array($result2,MYSQL_NUM)){	$var[] = $row1;}for($x=0;$x<=$row['0'];$x++){	if($var[$x][0] == $stockno)	echo ($x+1);}

问题在于你的 $arrs 和 $a 分别来自不关联的两个表,所以你需要找出两者的联系
因为你实际输出的是 $a, 所以你应该在取得 $a 后再去求取与之对应的 $arrs
这样合乎常理,也就很容易输出了

问题在于你的 $arrs 和 $a 分别来自不关联的两个表,所以你需要找出两者的联系
因为你实际输出的是 $a, 所以你应该在取得 $a 后再去求取与之对应的 $arrs
这样合乎常理,也就很容易输出了
好的。我明天先试试。谢谢答复。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn