PHP: Move associative array element to beginning of array

Php

Php Problem Overview


What would be the best method of moving any element of an associative array to the beginning of the array?

For example, say I have the following array:

$myArray = array(
	'two'   => 'Blah Blah Blah 2',
	'three' => 'Blah Blah Blah 3',
	'one'   => 'Blah Blah Blah 1',
	'four'  => 'Blah Blah Blah 4',
	'five'  => 'Blah Blah Blah 5',
);

What i want to do is move the 'one' element to the beginning and end up with the following array:

$myArray = array(
	'one'   => 'Blah Blah Blah 1',
	'two'   => 'Blah Blah Blah 2',
	'three' => 'Blah Blah Blah 3',
	'four'  => 'Blah Blah Blah 4',
	'five'  => 'Blah Blah Blah 5',
);

Php Solutions


Solution 1 - Php

You can use the array union operator (+) to join the original array to a new associative array using the known key (one).

$myArray = array('one' => $myArray['one']) + $myArray;
// or      ['one' => $myArray['one']] + $myArray;

Array keys are unique, so it would be impossible for it to exist in two locations.

See further at the doc https://www.php.net/manual/en/language.operators.array.php">on Array Operators:

> The + operator returns the right-hand array appended to the left-hand array; for keys that exist in both arrays, the elements from the left-hand array will be used, and the matching elements from the right-hand array will be ignored.

Solution 2 - Php

If you have numerical array keys and want to reindex array keys, it would be better to put it into array_merge like this:

$myArray = array_merge(array($key => $value) + $myArray );

Solution 3 - Php

A bit late, but in case anyone needs it, I created this little snippet.

function arr_push_pos($key, $value, $pos, $arr) 
{
    $new_arr = array();
    $i = 1;

    foreach ($arr as $arr_key => $arr_value) 
    {
        if($i == $pos) 
            $new_arr[$key] = $value;
        
        $new_arr[$arr_key] = $arr_value;

        ++$i;
    }

    return $new_arr;
}

Just adjust it to suit your needs, or use it and unset the index to move. Works with associative arrays too.

Solution 4 - Php

Here's another simple one-liner that gets this done using array_splice():

$myArray = array_splice($myArray,array_search('one',array_keys($myArray)),1) + $myArray;

Solution 5 - Php

if you have 2 arrays, 1st has elements to move to the top of 2nd array of elements, you can use

$result = \array_replace($ArrayToMoveToTop, $myArray);

Here is a code sample:

//source array    
$myArray = [
    'two' => 'Blah Blah Blah 2',
    'three' => 'Blah Blah Blah 3',
    'one' => 'Blah Blah Blah 1',
    'four' => 'Blah Blah Blah 4',
    'five' => 'Blah Blah Blah 5',
];
// set necessary order
$orderArray = [
    'one' => '',
    'two' => '',
];
//apply it
$result = \array_replace($orderArray, $myArray);
\print_r($result);

Solution 6 - Php

There's a function in the comments of the PHP manual for array_unshift which can be used to add an element, with key, to the beginning of an array:

function array_unshift_assoc(&$arr, $key, $val)
{
    $arr = array_reverse($arr, true);
    $arr[$key] = $val;
    return array_reverse($arr, true);
}

Unset the element and reinsert it again with the above function:

$tmp = $myArray['one'];
unset($myArray['one']);
$myArray = array_unshift_assoc($myArray, 'one', $tmp);

A more general approach may be to use uksort to sort your array by keys and provide a sorting function of your own.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser1493356View Question on Stackoverflow
Solution 1 - PhpMark EirichView Answer on Stackoverflow
Solution 2 - PhptranteView Answer on Stackoverflow
Solution 3 - PhpSuneView Answer on Stackoverflow
Solution 4 - PhpEaten by a GrueView Answer on Stackoverflow
Solution 5 - PhpEugene KaurovView Answer on Stackoverflow
Solution 6 - PhpEmil VikströmView Answer on Stackoverflow