2016-10-21 12 views
-3

私は以下のような配列を持っています。私はほとんどのタグが一致する配列を並べ替える必要があります。アソシエート配列のソート

[0] =>[ 
    [id]=>1, 
    [tags]=>Apple,Banana,Mango 
    ], 
[1] =>[ 
    [id]=>2, 
    [tags]=>Apple,Mango,Banana,Orange 
    ], 
[2] =>[ 
    [id]=>3, 
    [tags]=>Mango,Orange 
    ],, 
[3] =>[ 
    [id]=>4, 
    [tags]=>Blackberry,Orange 
    ], 
[4] =>[ 
    [id]=>5, 
    [tags]=>Orange,Blackberry,Banana 
    ] 

私は配列をソートするためのタグの文字列を持っています。

$tags_str = "Mango,Banana,Orange". // dynamic string (no. of tags not fix) 

配列は、一致するタグの降順に並べ替える必要があります。

予想される出力:

[0] =>[ 
     [id]=>2, 
     [tags]=>Apple,Mango,Banana,Orange // 3 tags matched 
    ], 
[1] =>[ 
    [id]=>1, 
    [tags]=>Apple,Banana,Mango   // 2 tags matched 
    ], 
[2] =>[ 
    [id]=>3, 
    [tags]=>Mango,Orange    // 2 tags matched 
    ], 
[3] =>[ 
    [id]=>5, 
    [tags]=>Orange,Blackberry,Banana // 2 tags matched 
    ], 
[4] =>[ 
    [id]=>4, 
    [tags]=>Blackberry,Orange   // 1 tag matched 
    ] 

がどのようにPHPでこれを達成することができますか?

+2

にあなただけのあなたのために仕事をするために私たちを求めていますか?試したことで何か問題があった場合はそれを聞くことができます。そうでなければ信頼できる助けが得られないでしょう – ElefantPhace

答えて

0

OPはそれに値しませんが、可能な解決策

<?php 
error_reporting(E_ALL); 
ini_set('display_errors',1); 

$toSort = [ 
    ['id'=>1,'tags'=>'Apple,Banana,Mango'] 
    ,['id'=>2,'tags'=>'Apple,Mango,Banana,Orange'] 
    ,['id'=>3,'tags'=>'Mango,Orange'] 
    ,['id'=>4,'tags'=>'Blackberry,Orange'] 
    ,['id'=>5,'tags'=>'Orange,Blackberry,Banana'] 

]; 

$tags_str = "Mango,Banana,Orange"; 

$tagSearch = explode(',',$tags_str); 
foreach ($toSort as &$v) { 
    $v['m'] = count(array_intersect($tagSearch,explode(',',$v['tags']))); 
} 

uasort($toSort,function ($a,$b){ 
    return $b['m']-$a['m']; 
}); 

print_r($toSort);