function cmp($a, $b)
{
    $a1=substr($a,4);
$b1=substr($b,4);
if ($a1 == $b1) {
        return 0;
    }
    return ($a1 < $b1) ? -1 : 1;
}$arr = array (
"主题ddddddddddd",
"公告ccccccccccc",
"主题ccccccccccc",
"主题bbbbbbbbbbb",
"公告bbbbbbbbbbb",
"置顶bbbbbbbbbbb",
"置顶aaaaaaaaaaa",
"公告aaaaaaaaaaa",
"主题aaaaaaaaaaa"
);
usort($arr, "cmp");foreach ($arr as $key => $value) {
    echo "$key: $value\n";
}

解决方案 »

  1.   

    刚才没注意你的排列要求,改了排序比较
    function cmp($a, $b)
    {
        $a1=substr($a,0,4);
        $b1=substr($b,0,4);
        if ($a1 == $b1) {
            $a2=substr($a,4);
            $b2=substr($b,4);
            if ($a2 == $b2) {
                return 0;
            }
            return ($a2 < $b2) ? -1 : 1;
        }
        return ($a1 < $b1) ? -1 : 1;
    }
      

  2.   

    <?
    $data = array (
        "主题ddddddddddd",
    "公告ccccccccccc",
    "主题ccccccccccc",
    "主题bbbbbbbbbbb",
    "公告bbbbbbbbbbb",
    "置顶bbbbbbbbbbb",
    "置顶aaaaaaaaaaa",
    "公告aaaaaaaaaaa",
    "主题aaaaaaaaaaa"
    );
    //程序实现: 
    //1. 给出一个数组
    $sort = array("公告", "置顶", "主题");
    //2. 与你的数组$data成双层循环
    foreach($sort as $key => $value)
    {
         foreach($data as $key1 =>$value1)
         {
             if (eregi("^$value*.", $value1)) { //3. 用正则判断
                $new[] = $value1; //4. 生成新数组
             }
          
         }
    }
    print "<pre>\r\n";
    print_r($data);
    print "</pre>\r\n";
    print "<pre>\r\n";
    print_r($new);
    print "</pre>\r\n";?>