在PHP中排序关联数组

时间:2015-03-20 20:48:38

标签: php arrays function sorting

function mysort($arr)
{
for ($i = 0; $i < count($arr); $i++) {
    $j = $i;
    while ($j > 0 && $arr[$j] < $arr[$j-1]) {
        $tmp = $arr[$j-1];
        $arr[$j-1] = $arr[$j];
        $arr[$j] = $tmp;
        $j--;
    }
}

return $arr;
}

$array = array(
'a' => '1',
'f' => '3',
'g' => '5',
's' => '2',
'r' => '8'
 );
$values = array_values($array);

$sorted = array();
foreach (mysort($values) as $key=> $value) {
$sorted[$value] = $array[$value];
}

print_r($sorted);

我完全迷失在这里。我想做的是根据值对数组$ array进行排序,使输出为

a = 1

s = 2

f = 3

g = 5

r = 8

然而,我试图在不使用任何排序方法(如asort,usort或ksort)的情况下执行此操作。只是我自己的功能。

1 个答案:

答案 0 :(得分:2)

这应该适合你:

在这里,我简单地循环遍历$array的所有元素,并将它们保存在$sorted中。在第一个if语句中,我检查$sorted数组是否为空或者$array的当前元素是否大于排序数组的最后一个元素。如果确实如此,我只需将元素末尾附加到$sorted数组。

E.g。 (伪代码):

empty($sorted) || end($sorted) < current($array)

否则,我将进入我遍历$sorted数组的else部分,以找到$sorted的当前元素小于$array的当前元素的位置并且$sorted的下一个元素大于$array的当前元素(所以要找到$array的当前元素必须介于其中的点。)

E.g(伪代码):

current($sorted) < current($array) && next(current($sorted)) > current($array) 

如果是这种情况,我首先从$sorted数组的当前元素中删除该部分,并将其保存在tmp变量中。然后我追加$array中的当前元素,然后在$sorted数组的末尾追加我再次剪切的部分。

<?php

    $array = [
            'a' => '1',
            'r' => '8',
            'g' => '5',
            'f' => '3',
            's' => '2',



    ];

    $sorted = [];
    $keys = array_keys($array);


    for($count = 0; $count < count($array); $count++) {

        $tmpKeys = array_keys($sorted);
        if(empty($sorted) || $sorted[$tmpKeys[count($sorted)-1]] < $array[$keys[$count]]) {
            $sorted[$keys[$count]] = $array[$keys[$count]];
        } else {

            for($innerCount = 0; $innerCount < count($sorted)-1; $innerCount++) {

                if($sorted[$tmpKeys[$innerCount]] < $array[$keys[$count]] && $array[$keys[$count]] < $sorted[$tmpKeys[$innerCount+1]]) {
                    $tmp = array_splice($sorted, $innerCount+1);
                    $sorted[$keys[$count]] = $array[$keys[$count]];
                    $sorted = array_merge($sorted, $tmp); 
                }

            }
        }

    }

    print_r($array);
    print_r($sorted);

?>

输出:

Array ( [a] => 1 [r] => 8 [g] => 5 [f] => 3 [s] => 2 )
Array ( [a] => 1 [s] => 2 [f] => 3 [g] => 5 [r] => 8 )