Group Array具有相似字符串的项

时间:2016-06-10 04:28:09

标签: php arrays grouping

我有一个简单的字符串数组:

$Hand = array("05h", "02h", "03c", "02s", "04h");

这就是我想用它做的事情:

如果某个数字出现多次,则将该数字分组在数组的开头。所以我的最终结果是:

$Hand = array("02h", "02s", "05h", "03c", "04h");

这是迄今为止我从其他答案拼凑而成的内容,但我不知道如何使这些部分协同工作以实现我的目标。

$Hand = array("05h", "02h", "03c", "02s", "04h");

rsort($Hand,SORT_NUMERIC);

print_r ($Hand);

echo "<br>";

function myfunction($Card)
{
 return(substr($Card,0,2));
}

$CountedHand = array_count_values(array_map("myfunction",$Hand));
asort($CountedHand);
print_r(array_reverse($CountedHand));
Uchiha的评论解决了原始数组,但我有一些更复杂的数组,它不适合。这是其他几个阵列。

$Hand2 = array("05h", "02h", "03c", "02s", "03h");
$Hand3 = array("03s", "02h", "03c", "02s", "03h");

3 个答案:

答案 0 :(得分:0)

你可以简单地使用asort()来获得结果:

    <?php
    $Hand = array("05h", "02h", "03c", "02s", "04h");
    asort($Hand);
    print_r($Hand);
     ?>

希望这会有所帮助

答案 1 :(得分:0)

这可能会对您有所帮助,但它不会输出您的预期输出。您只需使用usort功能

即可
usort($Hand, function($a,$b) {
    if((int) $a == (int) $b){
        return 0;
    } else {
        return 1;
    }
});

输出PHP&gt; = 5.5.0 - 5.6.22:

Array
(
    [0] => 02s
    [1] => 02h
    [2] => 05h
    [3] => 03c
    [4] => 04h
)

Demo

答案 2 :(得分:0)

首先获取数组中每个单词的频率,然后按如下所示对数组进行排序

$hand2 = array("05h", "02h", "03c", "02h", "03h");
$freq = array_count_values($hand2);
arsort($freq);
print_r($freq);