#php #arrays #sorting
#php #массивы #сортировка
Вопрос:
У меня есть массив, подобный приведенному ниже. Мне нужно отсортировать массив по большинству совпадающих тегов.
[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?
Комментарии:
1. Вы просто просите нас сделать вашу работу за вас? Если у вас возникла проблема с чем-то, что вы пробовали, вы можете спросить об этом, иначе вы, вероятно, не получите надежной помощи
Ответ №1:
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 amp;$v) {
$v['m'] = count(array_intersect($tagSearch,explode(',',$v['tags'])));
}
uasort($toSort,function ($a,$b){
return $b['m']-$a['m'];
});
print_r($toSort);