'879798'),[1] = >array( 'name' => "a9", 'time' => '85665565'),">
当前位置:Gxlcms > PHP教程 > 排序有什么更好的步骤

排序有什么更好的步骤

时间:2021-07-01 10:21:17 帮助过:4人阅读

排序有什么更好的方法
array(
[0] =>array(
'name' => "a",
'time' => '879798'),
[1] = >array(
'name' => "a9",
'time' => '85665565'),
[2] = >array(
'name' => "hdhdjd",
'time' => '8154465'),
[3] = >array(
'name' => "a",
'time' => '800000'),
[4] = >array(
'name' => "dr",
'time' => '789898'),
);


是一个已经按照time排序好的数组
现在要排这样

array(
[0] =>array(
'name' => "a",
'time' => '879798'),
[1] = >array(
'name' => "a",
'time' => '800000'),
[2] = >array(
'name' => "a9",
'time' => '85665565'),
[3] = >array(
'name' => "hdhdjd",
'time' => '8154465'),

[4] = >array(
'name' => "dr",
'time' => '789898'),
);

把name相同的在一起。以第一个出现的次序为大。

不知道有什么好方式啊,代码写的漂亮点的。

------解决方案--------------------
PHP code
$ar = array(
0 =>array(
 'name' => "a",
 'time' => '879798'),
1 => array(
 'name' => "a9",
 'time' => '856565'), //85665565 ? 示例数据有问题吧,看不出是按time排序的!
2 =>array(
 'name' => "hdhdjd",
 'time' => '815465'),
3 =>array(
 'name' => "a",
 'time' => '800000'),
4 =>array(
 'name' => "dr",
 'time' => '789898'),
);

$result = array();
$len = count($ar);
for ($i = 0; $i < $len; $i ++) {
    $result[] = array_shift($ar);
    for ($j = 0; $j < count($ar); $j ++) {
        if ($ar[$j]['name'] == $result[count($result) - 1]['name']) {
            $result[] = array_splice($ar, $j, 1);
            break;
        }
    }
}

echo '
';
print_r($result);

/*
Array
(
    [0] => Array
        (
            [name] => a
            [time] => 879798
        )

    [1] => Array
        (
            [0] => Array
                (
                    [name] => a
                    [time] => 800000
                )

        )

    [2] => Array
        (
            [name] => a9
            [time] => 856565
        )

    [3] => Array
        (
            [name] => hdhdjd
            [time] => 815465
        )

    [4] => Array
        (
            [name] => dr
            [time] => 789898
        )

    [5] => 
)
*/

------解决方案--------------------
有点问题,修改一下:
PHP code
$result = array();
$len = count($ar);
for ($i = 0; $i < $len - 1; $i ++) {
    $result[] = array_shift($ar);
    for ($j = 0; $j < count($ar) - 1; $j ++) {
        if ($ar[$j]['name'] == $result[count($result) - 1]['name']) {
            $item = array_splice($ar, $j, 1);
            $result[] = $item[0];
            break;
        }
    }
}

------解决方案--------------------
C/C++ code
 "a",
                         'time' => '879798'),
                array(
                         'name' => "a9",
                          'time' => '85665565'),
                array(
                         'name' => "dr",
                          'time' => '8154465'),
                array(
                         'name' => "a",
                          'time' => '800000'),
                array(
                         'name' => "dr",
                          'time' => '789898'),
);

$names = array();
$index = array();

array_walk($arr, function($val, $key){
                        global $names;
                        global $index;
                        $names[] = $val['name'];
                        $index[] = $key;
                });

array_multisort($names, $index, $arr);
print_r($arr);
?>
                     

人气教程排行