ホームページ > バックエンド開発 > PHPチュートリアル > PHP 配列の比較とマージによる効率の向上

PHP 配列の比較とマージによる効率の向上

WBOY
リリース: 2016-06-23 14:13:36
オリジナル
1173 人が閲覧しました

php 配列

$arr1 = 配列(1, 3, 5, 9,34,128,129);
$arr2 = 配列(1, 3, 6, 22,33, 128);
$arr3 = 配列(128,78, 56,33,5,1);

望ましい結果は次のとおりです:
$res = array(1,128,3,5,33,9,34,129,6,22,78,56); ルールは次のとおりです。 3 つの配列がマージされ、最も繰り返しの多い配列が前方に配置されます
//$arr1 $arr2 $arr3 は desc または asc 配列でなければなりません

//$arr1 と $arr2 の並べ替えが 2 つしかない場合、または別の並べ替えを追加した場合はどうなりますか$arr4
//ありがとう~

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

$arr1 = array(1, 3, 5, 9,34,128,129);$arr2 = array(1, 3, 6, 22,33, 128);$arr3 = array(128,78,56,33,5,1);$t = array_count_values(array_merge($arr1, $arr2, $arr3));arsort($t);print_r(array_keys($t));
ログイン後にコピー
Array

(

[0] => 1
[1] => 128
[2] => 5
[3 ] => 33
[4] => 78
[7] => 22
[9] => ; 9
[ 10] => 34
[11] => 6
)
内部関数のみを使用するのは高速ですが、要件を完全に満たすことはできません
したがって、

$t = array_count_values(array_merge($arr1, $arr2, $arr3));$res = array();for($max=max($t); $max>0; $max--)  $res = array_merge($res, array_keys($t, $max));print_r($res);
ログイン後にコピー
Array を自分で記述する必要があります
[0] => 1
[1] => 128
[3] => 5
[4] => 33
[5] => ] => 34
[7] => 6
[10] => 78

)
はい、分かりました、モデレーターのおかげです〜私も昨夜コピーしました、
array_diff はあまり良くないので、とても冗長です
$arr1 = array(1,2,3,4,5,6,7,8,9,10);$arr2 = array(1,8,9,15,100);$arr3 = array(1,8,15,200);$res  = array();$resHigh	    = array();//高度相似$resMiddle	  = array();//中$resLow		 = array();//低$res	 = array_merge($arr1,$arr2,$arr3);$res	 = my_array_unique($res);				//排除重复$resHigh = array_intersect($arr1,$arr2,$arr3);	//交集$resLow  = array_merge(array_diff($arr1,$arr2,$arr3),array_diff($arr2,$arr1,$arr3),array_diff($arr3,$arr1,$arr2));//组合差集$res	 = array_diff($res,$resHigh);			//排除High$resMiddle = array_diff($res,$resLow);			//排除Low$res	 = array_merge($resHigh,$resMiddle,$resLow);function my_array_unique($array){//排除重复   $out = array();   foreach ($array as $key=>$value) {       if (!in_array($value, $out)){           $out[$key] = $value;        }   }   return $out;} echo "<pre class="brush:php;toolbar:false">";print_r($res);exit;/*(    [0] => 1    [1] => 8    [2] => 9    [3] => 15    [4] => 2    [5] => 3    [6] => 4    [7] => 5    [8] => 6    [9] => 7    [10] => 10    [11] => 100    [12] => 200)*/
ログイン後にコピー

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート