开发者

Does this array function exist in PHP?

Is there a PHP function that will do the following:

Move a specified array value from it's current index and then either:

  1. 开发者_开发问答Moved in between two existing indices.
  2. Swapped with a second index/value.

I made the class below for the task, but wonder if there is a pre-existing function in the PHP library?

Here is the class I have created for the task:

class Rearranger
{   
    /*
     * Determines how to move the specified value.
     */
    public static function go($list, $indexToMove, $offset)
    {
        if(($offset == ($indexToMove - 1)) || ($offset == ($indexToMove + 1))) {
            //Value is only being moved up or down one index, so just swap the values
            $list = self::swap($list, $indexToMove, $offset);
        } else if($offset < $indexToMove) {
            //Value is being moved up (will be changing to a lower value index)
            $list = self::move($list, $indexToMove, $offset);
        } else if($offset > $indexToMove) {
            //Value will be moving down (will be changing to a higher value index)
            $list = self::move($list, $indexToMove, $offset - 1);
        } 
        return $list;
    }

    /* 
     * Moves the value at $list[$indexToMove] in between
     * $list[$offset - 1] and $list[$offset].
     */
    public static function move($list, $indexToMove, $offset)
    {
        $container = $list[$indexToMove];
        unset($list[$indexToMove]);
        $list = array_values($list);
        $list2 = array_slice($list, $offset);
        $list = array_slice($list, 0, $offset);
        array_push($list, $container);
        return array_merge($list, $list2);
    }

    //Swap the values of two array indices
    public static function swap($list, $indexA, $indexB)
    {
        $vA = $list[$indexA];
        $vB = $list[$indexB];
        $list[$indexA] = $vB;
        $list[$indexB] = $vA;
        return $list;
    }
}

Here are some example usages of the Rearranger class:

$a1 = array('a', 'b', 'c', 'd', 'e', 'f');

function display($list) { echo '<p>' . var_dump($list) . '</p>'; }

//Move value at index 4 to between index 0 and 1
$a1 = Rearranger::go($a1, 4, 1);
display($a1);

//Move value at index 1 to between index 3 and 4
$a1 = Rearranger::go($a1, 1, 4);
display($a1);

//Swap value 2 and 3    
$a1 = Rearranger::go($a1, 2, 3);
display($a1);

//Swap value 5 and 4 
$a1 = Rearranger::go($a1, 5, 4);
display($a1);

//Do nothing
$a1 = Rearranger::go($a1, 2, 2);
display($a1);


What you mean is a sort algorithm right? Well there are loads of functions to sort arrays in php. Wich function you need depends on the exact requirements by witch you want to sort.

Alot of sort alghoritms have been devised over the years, take a look.

EDIT How about:

$source = array('a','b','c','d');
$head = array_splice($source,0,2);
$tail = array_splice($source,2,4);
$new = array_merge($head,array('e'),$tail);
// should yield array('a','b','e','c','d')
// Please check the array_splice documentation, iam not a 100% sure on the syntax.

This way you should be able to insert a new element into the array. Should help you on your way.


$a1 = array('a', 'b', 'c', 'd', 'e', 'f');

Inserting array element at index:

array_splice($array, 3, 0, 'Z'); 
print_r($a1);

Array ( [0] => a [1] => b [2] => c [3] => Z [4] => d [5] => e [6] => f )

Swapping array elements:

list($a1[4], $a1[3]) = array($a1[3], $a1[4]);
print_r($a1);

Array ( [0] => a [1] => b [2] => c [3] => d [4] => Z [5] => e [6] => f )

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜