変数配列をリセット

WBOY
リリース: 2016-06-23 13:58:30
オリジナル
1012 人が閲覧しました

foreach($arr as k1=>$v1){			$sql2 = "select cust_no,total=SUM(mount)*snp from ".$t." where po_num = '".$stockno."' and cust_no = '".$v1['cust_no']."' group by cust_no,snp";				$result2 = mssql_query($sql2);			$b = array();			while($row2 = mssql_fetch_array($result2))			{				$b[] = $row2;			}									foreach($b as $var)			{				$num = $var['total'];				foreach($a as $i=>$dest)				{					if($num == 0)						break;					if($dest['cust_no'] != $var['cust_no'])						continue;					if($num >= $dest['part_count'])					{						$num -= $dest['part_count'];						$ress[] = $dest;						$a[$i]['part_count'] = 0;					}					else					{						$dest['part_count'] = $num;						$ress[] = $dest;						$a[$i]['part_count'] -= $num;						$num = 0;					}				}			}			print_r($ress);}
ログイン後にコピー


変数配列 $ress をリセットするにはどうすればよいですか? unset() を使用しても効果はありません。


ディスカッションへの返信(解決策)

unse がどこにあるのかわかりませんでした
要件を説明してください

unse がどこにあるのかわかりませんでした
要件を説明してください




対応する SQL 条件と配列 $b の値:
col1:select cust_no,total=SUM(mount)*snp from dfl_stock_detail where po_num = 'SU14031300627' and cust_no = '237033AW0A' group by cust_no,snpArray ( [0] => Array ( [0] => 237033AW0A [cust_no] => 237033AW0A [1] => 375 [total] => 375 ) )col2: select cust_no,total=SUM(mount)*snp from dfl_stock_detail where po_num = 'SU14031300627' and cust_no = '237033RC3A' group by cust_no,snpArray ( [0] => Array ( [0] => 237033RC3A [cust_no] => 237033RC3A [1] => 75 [total] => 75 ) )
ログイン後にコピー


$b の異なる値に従って、対応する $ress の値を見つけます。

しかし、$ress が計算されると、col2 は依然としてcol1 の結果になります。

unset が利用可能であるはずです。その unset で何かを出力して、何が起こるかを確認してください。

unse がどこにあるのかわかりません。

//已知数组a:array (  0 =>   array (    0 => '12653627',    'cust_no' => '12653627',    1 => '4069',    'lotno' => '4069',    2 => 19,    'part_count' => 19,  ),  1 =>   array (    0 => '12653627',    'cust_no' => '12653627',    1 => '4071',    'lotno' => '4071',    2 => 146,    'part_count' => 146,  ),  2 =>   array (    0 => '12654172',    'cust_no' => '12654172',    1 => '4071',    'lotno' => '4071',    2 => 855,    'part_count' => 855,  ),  3 =>   array (    0 => '237033AW0A',    'cust_no' => '237033AW0A',    1 => '4409',    'lotno' => '4409',    2 => 300,    'part_count' => 300,  ),  4 =>   array (    0 => '237033AW0A',    'cust_no' => '237033AW0A',    1 => '4410',    'lotno' => '4410',    2 => 141,    'part_count' => 141,  ),  5 =>   array (    0 => '237033RC3A ',    'cust_no' => '237033RC3A ',    1 => '4418',    'lotno' => '4418',    2 => 80,    'part_count' => 80,  ),  6 =>   array (    0 => '237033TC0A',    'cust_no' => '237033TC0A',    1 => '4401',    'lotno' => '4401',    2 => 2,    'part_count' => 2,  ),  7 =>   array (    0 => '237033TC0A',    'cust_no' => '237033TC0A',    1 => '4402',    'lotno' => '4402',    2 => 1,    'part_count' => 1,  ),  8 =>   array (    0 => '237033TC0A',    'cust_no' => '237033TC0A',    1 => '4408',    'lotno' => '4408',    2 => 178,    'part_count' => 178,  ),  9 =>   array (    0 => '237033TC0A',    'cust_no' => '237033TC0A',    1 => '4409',    'lotno' => '4409',    2 => 374,    'part_count' => 374,  ),)//数组barray (  0 =>   array (    'cust_no' => '237033AW0A',    'total' => 375,  ),  1 =>   array (    'cust_no' => '237033RC3A',    'total' => 75,  ),)
ログイン後にコピー


Array a配列 a の cust_no の合計が配列 b の cust_no の合計と一致する場合、配列 b と一致します。 $ress を必要とする同様の結果は次のとおりです:

Array(    [0] => Array        (            [cust_no] => 237033AW0A            [lotno] => 4409            [part_count] => 300        )    [1] => Array        (            [cust_no] => 237033AW0A            [lotno] => 4410            [part_count] => 75        )    [2] => Array        (            [cust_no] => 237033RC3A            [lotno] => 4418            [part_count] => 75        ))
ログイン後にコピー


これは可能ですか?あるいは、1# のようなループに入れて、配列 b の値が であるとき、対応する配列 a の一致結果は何ですか? $ress 値を割り当てた後にリセットするにはどうすればよいですか?

ということですか?それともさらに要件がありますか?
$a = array (  0 =>   array (    'cust_no' => '12653627',    'lotno' => '4069',    'part_count' => 19,  ),  1 =>   array (    'cust_no' => '12653627',    'lotno' => '4071',    'part_count' => 146,  ),  2 =>   array (    'cust_no' => '12654172',    'lotno' => '4071',    'part_count' => 855,  ),  3 =>   array (    'cust_no' => '237033AW0A',    'lotno' => '4409',    'part_count' => 300,  ),  4 =>   array (    'cust_no' => '237033AW0A',    'lotno' => '4410',    'part_count' => 141,  ),  5 =>   array (    'cust_no' => '237033RC3A',    'lotno' => '4418',    'part_count' => 80,  ),  6 =>   array (    'cust_no' => '237033TC0A',    'lotno' => '4401',    'part_count' => 2,  ),  7 =>   array (    'cust_no' => '237033TC0A',    'lotno' => '4402',    'part_count' => 1,  ),  8 =>   array (    'cust_no' => '237033TC0A',    'lotno' => '4408',    'part_count' => 178,  ),  9 =>   array (    'cust_no' => '237033TC0A',    'lotno' => '4409',    'part_count' => 374,  ),); $b = array (  0 =>   array (    'cust_no' => '237033AW0A',    'total' => 375,  ),  1 =>   array (    'cust_no' => '237033RC3A',    'total' => 75,  ),);foreach($b as $d) {  $k = $d['cust_no'];  reset($a);  foreach($a as $r) {    if($k != $r['cust_no']) continue;    $res[] = $r;  }}print_r($res);
ログイン後にコピー
array

[0] => array

[cust_no] => 2370333aw0a
[lotno] => 4409それともさらに要件がありますか?

$a のデータは #5 のデータに対応します。

<?phpforeach($arr as k1=>$v1){	$sql2 = "select cust_no,total=SUM(mount)*snp from ".$t." where po_num = '".$stockno."' and cust_no = '".$v1['cust_no']."' group by cust_no,snp";		$result2 = mssql_query($sql2);	$b = array();	while($row2 = mssql_fetch_array($result2))	{		$b[] = $row2;	}		var_export($b);	/*数组b分别对应2笔数据		数据1:  array ( 0 => array ( 0 => '237033AW0A', 'cust_no' => '237033AW0A', 1 => 375, 'total' => 375, ),)	数据2: array ( 0 => array ( 0 => '237033RC3A', 'cust_no' => '237033RC3A', 1 => 75, 'total' => 75, ), )) 		*/									foreach($b as $var)	{		$num = $var['total'];		foreach($a as $i=>$dest)		{			if($num == 0)				break;			if($dest['cust_no'] != $var['cust_no'])				continue;			if($num >= $dest['part_count'])			{				$num -= $dest['part_count'];				$ress[] = $dest;				$a[$i]['part_count'] = 0;			}			else			{				$dest['part_count'] = $num;				$ress[] = $dest;				$a[$i]['part_count'] -= $num;				$num = 0;			}		}	}	print_r($ress);		/*	目前的结果:		第一笔:	Array	(		[0] => Array			(				[0] => 237033AW0A				[cust_no] => 237033AW0A				[1] => 4409				[lotno] => 4409				[2] => 300				[part_count] => 300			)		[1] => Array			(				[0] => 237033AW0A				[cust_no] => 237033AW0A				[1] => 4410				[lotno] => 4410				[2] => 141				[part_count] => 75			)	)		第二笔:	Array	(		[0] => Array			(				[0] => 237033AW0A				[cust_no] => 237033AW0A				[1] => 4409				[lotno] => 4409				[2] => 300				[part_count] => 300			)		[1] => Array			(				[0] => 237033AW0A				[cust_no] => 237033AW0A				[1] => 4410				[lotno] => 4410				[2] => 141				[part_count] => 75			)	)			希望得到的数据:	第一笔:		Array ( 			[0] => Array ( 							[cust_no] => 237033AW0A 							[lotno] => 4409 							[part_count] => 300 						) 			[1] => Array ( 							[cust_no] => 237033AW0A 							[lotno] => 4410 							[part_count] => 75 						  ) 		   )		第二笔:		Array (			[0] => Array (							[cust_no] => 237033RC3A							[lotno] => 4418							[part_count] => 75						  )		  )		*/}?>
ログイン後にコピー


部分的なデータ補足:

$arr = array ( 0 => array ( 0 => '2014-03-19 11:00', 'over_time' => '2014-03-19 11:00', 1 => 'A2', 'arr_adress' => 'A2', 2 => 'L12F', 'c_type' => 'L12F', 3 => 'SU14031300627', 'po_num' => 'SU14031300627', 4 => '237033AW0A', 'cust_no' => '237033AW0A', 5 => 25, 'mount' => 25, 6 => 15, 'snp' => 15, 7 => 375, 'totals' => 375, 8 => '2014-03-15', 'late_time' => '2014-03-15', ), 1 => array ( 0 => '2014-03-19 11:00', 'over_time' => '2014-03-19 11:00', 1 => 'A2', 'arr_adress' => 'A2', 2 => 'L12F', 'c_type' => 'L12F', 3 => 'SU14031300627', 'po_num' => 'SU14031300627', 4 => '237033RC3A', 'cust_no' => '237033RC3A', 5 => 5, 'mount' => 5, 6 => 15, 'snp' => 15, 7 => 75, 'totals' => 75, 8 => '2014-03-15', 'late_time' => '2014-03-15', ), ) $a = array (  0 =>   array (    'cust_no' => '12653627',    'lotno' => '4069',    'part_count' => 19,  ),  1 =>   array (    'cust_no' => '12653627',    'lotno' => '4071',    'part_count' => 146,  ),  2 =>   array (    'cust_no' => '12654172',    'lotno' => '4071',    'part_count' => 855,  ),  3 =>   array (    'cust_no' => '237033AW0A',    'lotno' => '4409',    'part_count' => 300,  ),  4 =>   array (    'cust_no' => '237033AW0A',    'lotno' => '4410',    'part_count' => 141,  ),  5 =>   array (    'cust_no' => '237033RC3A',    'lotno' => '4418',    'part_count' => 80,  ),  6 =>   array (    'cust_no' => '237033TC0A',    'lotno' => '4401',    'part_count' => 2,  ),  7 =>   array (    'cust_no' => '237033TC0A',    'lotno' => '4402',    'part_count' => 1,  ),  8 =>   array (    'cust_no' => '237033TC0A',    'lotno' => '4408',    'part_count' => 178,  ),  9 =>   array (    'cust_no' => '237033TC0A',    'lotno' => '4409',    'part_count' => 374,  ),);
ログイン後にコピー


私の #6 はあなたの要件を満たしていませんか?
$b をグループで扱いたい場合は、
foreach($b as $d) {
$res = array();


私の #6 は要件を満たしていませんか?
$b をグループで扱う場合、
foreach($b as $d) {
$res = array();

$b の結果を満たすために $a を減算する必要があります。例:

$ress の結果

Array ( [0] => Array ( [cust_no] => 237033AW0A [lotno] => 4409 [part_count] => 300 ) [1] => Array ( [cust_no ] => 237033AW0A [lotno] => 4410 [part_count] => 75 ) )

$b を満たす結果
array ( 'cust_no' => '237033AW0A', ' total' = > 375, ), )

私の #6 は要件を満たしていませんか?

$b をグループで扱いたい場合は、

foreach($b as $d) {
$res = array();

私の #6 は要件を満たしていませんか?

$a と $b の cust_no フィールドが同じ場合に、$b の合計を満たす $a のpart_count の数を求めたい場合、どのようにその数を求めますか?

私の #6 はあなたの要件を満たしていませんか?



link

和这个问题类似。不过$b变成了多维数组。

在那个帖子中 $b 也是多维数组

在那个帖子中 $b 也是多维数组


但是只能求得$b中第一个一维数组的结果集。

这个意思?

$a = array (  0 =>   array (    'cust_no' => '12653627',    'lotno' => '4069',    'part_count' => 19,  ),  1 =>   array (    'cust_no' => '12653627',    'lotno' => '4071',    'part_count' => 146,  ),  2 =>   array (    'cust_no' => '12654172',    'lotno' => '4071',    'part_count' => 855,  ),  3 =>   array (    'cust_no' => '237033AW0A',    'lotno' => '4409',    'part_count' => 300,  ),  4 =>   array (    'cust_no' => '237033AW0A',    'lotno' => '4410',    'part_count' => 141,  ),  5 =>   array (    'cust_no' => '237033RC3A',    'lotno' => '4418',    'part_count' => 80,  ),  6 =>   array (    'cust_no' => '237033TC0A',    'lotno' => '4401',    'part_count' => 2,  ),  7 =>   array (    'cust_no' => '237033TC0A',    'lotno' => '4402',    'part_count' => 1,  ),  8 =>   array (    'cust_no' => '237033TC0A',    'lotno' => '4408',    'part_count' => 178,  ),  9 =>   array (    'cust_no' => '237033TC0A',    'lotno' => '4409',    'part_count' => 374,  ),);  $b = array (  array (    'cust_no' => '237033AW0A',    'total' => 375,  ),  array (    'cust_no' => '237033RC3A',    'total' => 75,  ),); foreach($b as $source) {  do {    $k = 0;    $num = $source['total'];    foreach($a as $i=>$dest) {      if($num == 0) break;      if($dest['cust_no'] != $source['cust_no']) continue;      if($dest['part_count'] == 0) continue;      $k++;      if($num >= $dest['part_count']) {        $num -= $dest['part_count'];        $res[] = $dest;        $a[$i]['part_count'] = 0;      }else {        $dest['part_count'] = $num;        $res[] = $dest;        $a[$i]['part_count'] -= $num;        $num = 0;      }    }  }while($k);}var_export($res);
ログイン後にコピー
array (  0 =>   array (    'cust_no' => '237033AW0A',    'lotno' => '4409',    'part_count' => 300,  ),  1 =>   array (    'cust_no' => '237033AW0A',    'lotno' => '4410',    'part_count' => 75,  ),  2 =>   array (    'cust_no' => '237033AW0A',    'lotno' => '4410',    'part_count' => 66,  ),  3 =>   array (    'cust_no' => '237033RC3A',    'lotno' => '4418',    'part_count' => 75,  ),  4 =>   array (    'cust_no' => '237033RC3A',    'lotno' => '4418',    'part_count' => 5,  ),)
ログイン後にコピー

这个意思?



如果只求得这样的结果集:怎么求?

array (  0 =>   array (    'cust_no' => '237033AW0A',    'lotno' => '4409',    'part_count' => 300,  ),  1 =>   array (    'cust_no' => '237033AW0A',    'lotno' => '4410',    'part_count' => 75,  ),  2 =>   array (    'cust_no' => '237033RC3A',    'lotno' => '4418',    'part_count' => 75,  ),)
ログイン後にコピー

这个意思?



可能是哪里的程序问题,同样的代码,程序的和例子得出来的结果不一样。我先调试调试再说吧。谢谢!
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート