助けてください。php は 2 つの 2 次元配列を比較し、キーで並べ替えて重複する値を見つけます。 。

WBOY
リリース: 2016-06-23 14:21:59
オリジナル
902 人が閲覧しました

2 次元配列 php のソート

例は次のとおりです:
$arr1=array(   0=>array('pid'=>1,name=>'user1'),   1=>array('pid'=>2,name=>'user2'));
ログイン後にコピー

$arr2=array(   0=>array('pid'=>3,name=>'user1'),   1=>array('pid'=>4,name=>'user4'));
ログイン後にコピー

次の結果を取得したいです:
$arr2=array(   0=>array('pid'=>1,name=>'user1'),   1=>array('pid'=>2,name=>'user2')   2=>array('pid'=>3,name=>'user3'),   3=>array('pid'=>4,name=>'user4'));
ログイン後にコピー

これら 2 つの配列を比較して重複する値を見つけ、pid で並べ替えて、次に、大きい方の pid を持つ方を並べ替えます 重複した user1 を user3 に変更します


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

$arr1=array(   0=>array('pid'=>1,'name'=>'user1'),   1=>array('pid'=>2,'name'=>'user2'));$arr2=array(   0=>array('pid'=>3,'name'=>'user1'),   1=>array('pid'=>4,'name'=>'user4'));$t = array();foreach(array_merge($arr1, $arr2) as $v) {  if(isset($t[$v['name']])) {    if($t[$v['name']]['pid'] > $v['pid']) $t[$v['name']]['name'] = "user{$v['pid']}";    else $v['name'] = "user{$v['pid']}";  }  $t[$v['name']] = $v;}print_r($t);
ログイン後にコピー
ログイン後にコピー
Array(    [user1] => Array        (            [pid] => 1            [name] => user1        )    [user2] => Array        (            [pid] => 2            [name] => user2        )    [user3] => Array        (            [pid] => 3            [name] => user3        )    [user4] => Array        (            [pid] => 4            [name] => user4        ))
ログイン後にコピー
ログイン後にコピー

これら 2 つの配列を比較して、pid で並べ替えられた重複する値を見つけたいと思います。次に、より大きな pid を持つ重複した user1 を user3 に変更します
arr1 と arr2 に重複したデータがありますか?何が繰り返しとしてカウントされますか?同じ名前ですが、重複しているだけですか?


これら 2 つの配列を比較して重複する値を見つけ、pid で並べ替えて、pid が大きい重複した user1 を user3 に変更したいと思います
arr1 と arr2 に重複したデータはありますか?何が繰り返しとしてカウントされますか?同じ名前ですが、重複しているだけですか?
はい。

$arr1=array(   0=>array('pid'=>1,'name'=>'user1'),   1=>array('pid'=>2,'name'=>'user2'));$arr2=array(   0=>array('pid'=>3,'name'=>'user1'),   1=>array('pid'=>4,'name'=>'user4'));$t = array();foreach(array_merge($arr1, $arr2) as $v) {  if(isset($t[$v['name']])) {    if($t[$v['name']]['pid'] > $v['pid']) $t[$v['name']]['name'] = "user{$v['pid']}";    else $v['name'] = "user{$v['pid']}";  }  $t[$v['name']] = $v;}print_r($t);
ログイン後にコピー
ログイン後にコピー
Array(    [user1] => Array        (            [pid] => 1            [name] => user1        )    [user2] => Array        (            [pid] => 2            [name] => user2        )    [user3] => Array        (            [pid] => 3            [name] => user3        )    [user4] => Array        (            [pid] => 4            [name] => user4        ))
ログイン後にコピー
ログイン後にコピー


xu この $t がどのような形で現れるのか説明してもらえますか?どのように保管されているのでしょうか?

モデレーター権限では、name をキーとして $t という配列を再編成し、データ行が作成されるたびに $t がチェックされ、キーが存在するかどうかが判断されます。最大のpid。存在しない場合は、$t データの完全な行が使用されます。

印刷された結果をもう見たことがありませんか?
名前が重複しないようにする必要があるため、関連キーとして名前を使用できます
関連キーが重複する可能性があることが判明した場合は、それに応じて処理します

印刷結果はもうご覧になりましたか?
名前が重複しないようにする必要があるため、関連付けられたキーとして名前を使用できます
関連付けられたキーが重複する可能性があることが判明した場合は、それに応じて処理します
ありがとうございます

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