【问题标题】:Associate Array Sorting关联数组排序
【发布时间】:2016-10-21 06:53:25
【问题描述】:

我有如下数组。我需要按匹配的大多数标签对数组进行排序。

[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 中实现这一点?

【问题讨论】:

  • 您只是要求我们为您完成工作吗?如果您在尝试过的事情上遇到问题,可以提出来,否则您可能无法获得可靠的帮助

标签: php arrays sorting


【解决方案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 &$v) {
    $v['m'] = count(array_intersect($tagSearch,explode(',',$v['tags'])));
}

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

print_r($toSort);

【讨论】:

    猜你喜欢
    • 2019-04-23
    • 2011-02-26
    • 2017-05-04
    • 2011-01-28
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2013-04-09
    相关资源
    最近更新 更多