2016-06-10 61 views
0

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

$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)); 

宇智波的评论解决了原有的阵列,但我有一对夫妇更复杂的阵列,它不适合很好地工作。这里有一些其他数组。

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

回答

0

您可以简单地使用ASORT()的结果:

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

希望这将有助于

+0

这确实对它们进行排序,但我需要将重复项放置在beginn阵列。我不是简单地寻找一个排序的数组。不过谢谢。 – user3060512

0

这可能会帮助你,但它不输出作为您的预计产量。你可以简单地使用usort功能

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

输出PHP> = 5.5.0 - 22年6月5日:

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

Demo

+0

这是朝正确方向迈出的一步。我尝试点击Up投票,但没有发生任何事情。无论如何,它适用于我上面提供的一个场景,但我添加了一些其他场景,它没有正确排序。这确实给了我一些工作。谢谢。 – user3060512

0

首先获得每个单词的频率在阵列中,然后排序像下面的阵列

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

对不起,但这只是创建了每个项目出现次数的新阵列。 – user3060512