Php 使用自定义脚本对数组进行升序和降序排序时出现问题

Php 使用自定义脚本对数组进行升序和降序排序时出现问题,php,arrays,sorting,Php,Arrays,Sorting,我在这里要处理一个问题(代码中的一个逻辑错误为99%)。我似乎找不到解决问题的方法,但我打赌你们中的一个人很快就会发现问题 我必须创建一个函数,以asc或desc顺序对传递给它的数组进行排序,但不能使用任何数组排序函数 我一直在努力解决循环问题,直到现在,我终于想向其他开发人员(您)寻求帮助 目前只有升序的代码在工作,一旦我做了这个,降序就不会有问题了。它在某种程度上对值进行排序,但随后停止(如果下一个最小值位于传递的数组末尾,则停止)。我可以做些什么来防止这种情况,并使它对整个数组及其元素进行

我在这里要处理一个问题(代码中的一个逻辑错误为99%)。我似乎找不到解决问题的方法,但我打赌你们中的一个人很快就会发现问题

我必须创建一个函数,以asc或desc顺序对传递给它的数组进行排序,但不能使用任何数组排序函数

我一直在努力解决循环问题,直到现在,我终于想向其他开发人员(您)寻求帮助

目前只有升序的代码在工作,一旦我做了这个,降序就不会有问题了。它在某种程度上对值进行排序,但随后停止(如果下一个最小值位于传递的数组末尾,则停止)。我可以做些什么来防止这种情况,并使它对整个数组及其元素进行排序

这是到目前为止的代码

<?php

function order_array($array,$mode = 'ascending') {

    $length = count($array);

    if($mode == 'descending') {     
        return $array;
    } else {

        $sorted_array = array();
        $used_indexes = array();

        for($i = 0; $i < $length; $i++) {
            $smallest = true;

            echo $array[$i] . '<br/>';
            for($y = 0; $y < $length; $y++) {

                //echo $array[$i] . ' > ' . $array[$y] . '<br/>';
                // if at ANY time during checking element vs other ones in his array, he is BIGGER than that element
                // set smallest to false
                if(!in_array($y,$used_indexes)) {
                    if($array[$i] > $array[$y]) {
                        $smallest = false;
                        break;
                    }
                }
            }

            if($smallest) {
                $sorted_array[] = $array[$i];
                $used_indexes[] = $i;
            }

        }

        return $sorted_array;
    }
}

$array_to_sort = array(1, 3, 100, 99, 33, 20);
$sorted_array = order_array($array_to_sort);
print_r($sorted_array);

?>

函数顺序\u数组($array,$mode='升序'){
$length=计数($array);
$sorted_array=array();
$used_index=array();
对于($i=0;$i<$length;$i++){
$minister=true;
echo$array[$i]。
; 对于($y=0;$y<$length;$y++){ //echo$array[$i].'>'.$array[$y].
; //如果在检查元素对数组中其他元素的任何时候,他都比那个元素大 //将最小值设置为false if(!in_数组($y,$used_索引)){ 如果($array[$i]>$array[$y]){ $s=假; 打破 } } } 如果($最小){ $sorted_array[]=$array[$i]; $used_索引[]=$i; } 如果($mode=='descending'){ 返回数组\u reverse($sorted\u array); } 返回$U数组; } }
我通过完全不同的方式解决了这个问题。现在它对传入数组的所有元素进行了正确排序。我遇到的逻辑问题是使用for()循环。for()循环只运行了一组(传递数组的长度)次数,而我们需要它循环更多的次数,因为我们需要一直循环,直到我们有一个新的按升序排序的数组。下面是可以工作的代码

function order_array($array,$mode = 'ascending') {

    if($mode == 'descending') {

        // for() wont work here, since it will only loop an array length of times, when we would need it
        // to loop more than that.
        while(count($array)){
            $value = MAX($array); 
            $key = array_search($value, $array); 

            if ($key !== false) {
                unset($array[$key]);
            }
            $sorted[] = $value;
        }

        return $sorted;

    } else {

        // for() wont work here, since it will only loop an array length of times, when we would need it
        // to loop more than that.
        while(count($array)){
            $value = MIN($array); 
            $key = array_search($value, $array); 

            if ($key !== false) {
                unset($array[$key]);
            }
            $sorted[] = $value;
        }


        return $sorted;
    }
}

你读过我的帖子吗?因为我知道你没有回答这个问题。很明显,没有数组排序函数Sok,sory,但是您可以保持升序排序,只返回从末尾到第一个元素的数组(使用计数)。您能给我一个例子说明我需要在哪里执行此操作吗?或者指出我的代码中有逻辑错误的部分?我发布了一个答案,希望你能从中理解。谢谢,这会在“下降”模式下帮助我,但你不太理解我的问题:)我会知道如何在下降模式下做,问题是我为上升模式做的代码,未对所有传递的数组元素进行排序。在您的文本编辑器中尝试它,您将看到我的意思好的,我的意思是,您只需要为desc或asc开发一次,在另一个选项中,您所需要的是返回它。我理解这一点,但请尝试为升序模式运行代码。我很难让它正常工作。
function order_array($array,$mode = 'ascending') {

    if($mode == 'descending') {

        // for() wont work here, since it will only loop an array length of times, when we would need it
        // to loop more than that.
        while(count($array)){
            $value = MAX($array); 
            $key = array_search($value, $array); 

            if ($key !== false) {
                unset($array[$key]);
            }
            $sorted[] = $value;
        }

        return $sorted;

    } else {

        // for() wont work here, since it will only loop an array length of times, when we would need it
        // to loop more than that.
        while(count($array)){
            $value = MIN($array); 
            $key = array_search($value, $array); 

            if ($key !== false) {
                unset($array[$key]);
            }
            $sorted[] = $value;
        }


        return $sorted;
    }
}