php - 算法 - 数组翻转

146 阅读1分钟

    //常规一维数组翻转
    $arr = [2,1,4,6,8,0,12];

    /**
     * 常规翻转数组
     *
     * @param array $arr
     * @return array
     */
    function simpleReverseArr($arr = []){
        $key = count($arr) - 1;
        $reverseArr = [];
        while ($key >= 0){
            array_push($reverseArr, $arr[$key]);
            $key--;
        }
        return $reverseArr;
    }

    Tools::dd(simpleReverseArr($arr));

    /**
     * 双向遍历翻转数组
     *
     * @param array $arr
     * @return array
     */
    function doubleTraversalArr($arr = []){
        $left = 0;
        $right = count($arr) - 1;
        $reverseArr = [];
        while($left <= $right){
            $reverseArr[$right] = $arr[$left];
            $reverseArr[$left] = $arr[$right];
            $left++;
            $right--;
        }
        ksort($reverseArr);
        return $reverseArr;
    }

    Tools::dd(doubleTraversalArr($arr));


    //关联数组翻转
    $relationArr = [
        "name"=>"demo",
        "age"=>12,
        "province"=>"湖北"
    ];

    /**
     * 关联数组翻转
     *
     * @param array $arr
     * @return array
     */
    function relationArrReverse($arr = []){
        end($arr);
        $reverseArr = [];
        while (($value = current($arr)) != null){
            $reverseArr[key($arr)] = $value;
            prev($arr);
        }
        return $reverseArr;
    }

    Tools::dd(relationArrReverse($relationArr));