ホームページ >バックエンド開発 >PHPチュートリアル >配列を比較して対応関係を見つける

配列を比較して対応関係を見つける

WBOY
WBOYオリジナル
2016-06-23 13:52:09740ブラウズ

既知の配列 a:

$a = array (  0 =>   array (    'packageno' => 'S2Y140805025',    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4212',  ),  1 =>   array (    'packageno' => 'S2Y140805025',    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4214',  ),  2 =>   array (    'packageno' => 'SYS140804073',    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4212',  ),  3 =>   array (    'packageno' => 'SYS140804073',    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4213',  ),  4 =>   array (    'packageno' => 'SYS140731064',    'type' => 'ECS1-713',    'cust_no' => '12657727',    'lotno' => '4154',  ),  5 =>   array (    'packageno' => 'SYS140731064',    'type' => 'ECS1-713',    'cust_no' => '12657727',    'lotno' => '4210',  ),  6 =>   array (    'packageno' => 'SYS140801090',    'type' => 'ECS1-713',    'cust_no' => '12657727',    'lotno' => '4200',  ),  7 =>   array (    'packageno' => 'SYS140801090',    'type' => 'ECS1-713',    'cust_no' => '12657727',    'lotno' => '4210',  ),);


対応関係があります。たとえば、packageno S2Y140805025 は Lotno 4212、4214 に対応します (タイプは ECS0-235、cust_no は 12654172)

既知の配列 b:
$b = array (  0 =>   array (    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4211',  ),  1 =>   array (    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4212',  ),  2 =>   array (    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4213',  ),  3 =>   array (    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4214',  ),  4 =>   array (    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4216',  ),  5 =>   array (    'type' => 'ECS1-713',    'cust_no' => '12657727',    'lotno' => '4154',  ),  6 =>   array (    'type' => 'ECS1-713',    'cust_no' => '12657727',    'lotno' => '4200',  ),  7 =>   array (    'type' => 'ECS1-713',    'cust_no' => '12657727',    'lotno' => '4210',  ),);


質問:配列aの場合 bのtypeとcust_noが同じ場合、配列aのpackagenoに対応するlotnoが配列bで連続しているか、連続していない場合はpackagenoを表示します。

どうやって対処すればいいですか?


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

なぜいつも奇妙なニーズがあるのですか?もしかしたら、あなたのプロセスに何か問題があるかもしれません

$a = array (  0 =>   array (    'packageno' => 'S2Y140805025',    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4212',  ),  1 =>   array (    'packageno' => 'S2Y140805025',    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4214',  ),  2 =>   array (    'packageno' => 'SYS140804073',    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4212',  ),  3 =>   array (    'packageno' => 'SYS140804073',    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4213',  ),  4 =>   array (    'packageno' => 'SYS140731064',    'type' => 'ECS1-713',    'cust_no' => '12657727',    'lotno' => '4154',  ),  5 =>   array (    'packageno' => 'SYS140731064',    'type' => 'ECS1-713',    'cust_no' => '12657727',    'lotno' => '4210',  ),  6 =>   array (    'packageno' => 'SYS140801090',    'type' => 'ECS1-713',    'cust_no' => '12657727',    'lotno' => '4200',  ),  7 =>   array (    'packageno' => 'SYS140801090',    'type' => 'ECS1-713',    'cust_no' => '12657727',    'lotno' => '4210',  ),);$b = array (  0 =>   array (    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4211',  ),  1 =>   array (    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4212',  ),  2 =>   array (    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4213',  ),  3 =>   array (    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4214',  ),  4 =>   array (    'type' => 'ECS0-235',    'cust_no' => '12654172',    'lotno' => '4216',  ),  5 =>   array (    'type' => 'ECS1-713',    'cust_no' => '12657727',    'lotno' => '4154',  ),  6 =>   array (    'type' => 'ECS1-713',    'cust_no' => '12657727',    'lotno' => '4200',  ),  7 =>   array (    'type' => 'ECS1-713',    'cust_no' => '12657727',    'lotno' => '4210',  ),);foreach($a as $i=>$r) {  if($i == 0) {    echo preg_replace("/\t/", "\t\t", join("\t", array_keys($r)), 1);    echo "\t\tlotnos", PHP_EOL;  }  echo join("\t", $r);  $t = array();  foreach(array_filter($b, function($v) use (&$r) {    return $v['type'] == $r['type'] && $v['cust_no'] == $r['cust_no'];  }) as $c) $t[] = $c['lotno'];  echo "\t\t" . join(',', $t);  echo PHP_EOL;}
packageno	   type	    cust_no	lotno		lotnosS2Y140805025	ECS0-235	12654172	4212		4211,4212,4213,4214,4216S2Y140805025	ECS0-235	12654172	4214		4211,4212,4213,4214,4216SYS140804073	ECS0-235	12654172	4212		4211,4212,4213,4214,4216SYS140804073	ECS0-235	12654172	4213		4211,4212,4213,4214,4216SYS140731064	ECS1-713	12657727	4154		4154,4200,4210SYS140731064	ECS1-713	12657727	4210		4154,4200,4210SYS140801090	ECS1-713	12657727	4200		4154,4200,4210SYS140801090	ECS1-713	12657727	4210		4154,4200,4210
を見ていただくために、それらをすべてリストします

どうしていつも奇妙なニーズがあるのですか?もしかしたら、あなたのプロセスに何か問題があるかもしれません

packageno	   type	    cust_no	lotno		lotnosS2Y140805025	ECS0-235	12654172	4212		4211,4212,4213,4214,4216S2Y140805025	ECS0-235	12654172	4214		4211,4212,4213,4214,4216SYS140804073	ECS0-235	12654172	4212		4211,4212,4213,4214,4216SYS140804073	ECS0-235	12654172	4213		4211,4212,4213,4214,4216SYS140731064	ECS1-713	12657727	4154		4154,4200,4210SYS140731064	ECS1-713	12657727	4210		4154,4200,4210SYS140801090	ECS1-713	12657727	4200		4154,4200,4210SYS140801090	ECS1-713	12657727	4210		4154,4200,4210
を見てもらえるように、それらをすべてリストします



たぶん。 packagenoに対応するlotnoがb配列の順に並んでいるかどうかを尋ねます。例えば、SYS140731064に対応するlotno4154と4210は、b配列では4154、4200、4210に対応します。4154と4210の間には4200があるので、 SYS140731064のソートが異常であると判断し、 が表示されます。

packageno	   type	    cust_no	lotno		lotnosS2Y140805025	ECS0-235	12654172	4212,4214		4211,4212,4213,4214,4216SYS140804073	ECS0-235	12654172	4212,4213		4211,4212,4213,4214,4216SYS140731064	ECS1-713	12657727	4154,4210		4154,4200,4210SYS140801090	ECS1-713	12657727	4200,4210		4154,4200,4210



こうなったら解けますか?

チェックはせず、lotnos 列に直接出力しただけです
必要に応じてチェックしてもらえますか?

印刷順序に関しては、調整するだけです

チェックはせず、lotnos 列に直接出力しただけです
必要に応じてチェックしてもらえますか?

印刷順序に関しては、調整するだけです



Lotno と Lotnos の比較方法がわかりません。最初のパッケージを使用して、対応するロット番号がロット番号内で不連続であるかどうかを判断するにはどうすればよいですか?

echo "tt" . join(',', $t); は、lotnos 列を出力します
配列 $t は、b 配列内の対応する Lotno を保持します
ソートすると、それがどうかわかりません継続的?

echo "tt" . join(',', $t); は、lotnos 列を出力します
配列 $t は、b 配列内の対応する Lotno を保持します
それをソートすると、継続的ですか?



1# 実行後にコードは表示されません。
foreach(array_filter($b, function($v) use (&$r) {
return $v['type'] == $r['type' ] && $v['cust_no'] == $r['cust_no']
}) $c) $t[] = $c['lotno'];
echo "tt" . , $t);

php バージョン 5.2.5

echo "tt" . join(',', $t);
配列 $t は、b 配列内の対応する Lotno を出力します。
シーケンスを並べ替えることはできますが、連続しているかどうかはわかりませんか?



php 5.2.5では関数の使用方法がサポートされていないようです。
sortの使い方について、この文の意味が分かりません。例を教えてください。

  array_filter($b, function($v) use (&$r) {    return $v['type'] == $r['type'] && $v['cust_no'] == $r['cust_no'];  });

  array_filter($b, 'back');{  function back($v) {     global $r;     return $v['type'] == $r['type'] && $v['cust_no'] == $r['cust_no'];  }

....



別の形式で質問しましょう、
//假设数组$a,$a = array (  0 => '4154',  1 => '4210',);//数组$b,$b = array (  0 => '4154',  1 => '4200',  2 => '4210',);


配列 $a が配列 $b 内で連続しているかどうかを判断するにはどうすればよいでしょうか?

これはどういう意味ですか? これはどういう意味ですか?

$a = array (  0 => '4154',  1 => '4210',);$b = array (  0 => '4154',  1 => '4200',  2 => '4210',);foreach($a as $v) {  $c[] = array_search($v, $b);}for($i=1; $i<count($c); $i++) {  if(abs($c[$i] - $c[$i-1]) == 1) {    echo '不连续';    break;  }}

しかし、この状況は非連続であるはずですが、連続になってしまいます。

りー


これはどういう意味ですか?

$a = array (  0 => '4154',  1 => '4210',);$b = array (  0 => '4154',  1 => '4200',  2 => '4210',);foreach($a as $v) {  $c[] = array_search($v, $b);}for($i=1; $i<count($c); $i++) {  if(abs($c[$i] - $c[$i-1]) == 1) {    echo '连续';  }  else  {	echo '不连续';  }  break;} 



ループが不連続であると判断された場合、ループを終了するにはブレークする必要があります。これ以上比較しても意味がないからです。
ブレークは条件文の外側にあります。これはどういうロジックですか?


ループが不連続であると判断された場合にのみループから抜け出さなければなりません。これ以上比較しても意味がないからです。

あなたのブレイクは条件文の外側にあります。これはどういうロジックですか?


13# は無視して、14# の説明を確認してください。


$a = array (  0 => '4154',  1 => '4200',  2 => '4217',);$b = array (  0 => '4154',  1 => '4200',  2 => '4210',  3 => '4217',);//其中0,1连续,但是4217那项的键值和$b的4217的键值不等,所以判定为不连续。
連続連続 不連続
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。