Search code examples
phparraysassociative

Define the position of associative array elements


My array:

$data = array('two' => 2, 'one' => 1, 'three' => 3);

Now, with when I iterate the array, the first value that will come up will probably be

$data['two'] // = 2 @ index[0]

right?

What if I want to move the $data[1] to the position of $data[0] ?

To rephrase:

How do I make the array look like this (so that 'one' comes up at $data[0])

$data = array('one' => 1, 'two' => 2, 'three' => 3

Why do I need this?

I use code igniter, the table->generate built-in function takes an assoc array and creates a table but offers no method of arranging the columns. This is why I would like to move the columns in the source array.


Solution

  • Take a look at daniele centamore's comment on PHP's array_splice() function, where he provides a couple of functions for moving the elements in an non-associative array.

    <?php
    
    // $input  (Array) - the array containing the element
    // $index (int) - the index of the element you need to move
    
    function moveUp($input,$index) {
          $new_array = $input;
    
           if((count($new_array)>$index) && ($index>0)){
                     array_splice($new_array, $index-1, 0, $input[$index]);
                     array_splice($new_array, $index+1, 1);
                 } 
    
           return $new_array;
    }
    
    function moveDown($input,$index) {
           $new_array = $input;
    
           if(count($new_array)>$index) {
                     array_splice($new_array, $index+2, 0, $input[$index]);
                     array_splice($new_array, $index, 1);
                 } 
    
           return $new_array;
    }  
    
    $input = array("red", "green", "blue", "yellow");
    
    $newinput = moveUp($input, 2);
    // $newinput is array("red", "blue", "green", "yellow")
    
    $input = moveDown($newinput, 1);
    // $input is array("red", "green", "blue", "yellow")
    
    ?>