Подтвердить что ты не робот

PHP: перемещение элемента ассоциативного массива в начало массива

Каким будет лучший способ перемещения любого элемента ассоциативного массива в начало массива?

Например, скажем, у меня есть следующий массив:

$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',
);

Что я хочу сделать, это переместить элемент "один" в начало и в итоге получить следующий массив:

$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',
);
4b9b3361

Ответ 1

Это работает:

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

Ответ 2

Если у вас есть числовые ключи массива и вы хотите переделать ключи массива, было бы лучше поместить его в array_merge следующим образом:

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

Ответ 3

Немного поздно, но в случае, если кому-то это понадобится, я создал этот небольшой фрагмент.

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;
}

Просто отрегулируйте его в соответствии с вашими потребностями или используйте его и отключите индекс для перемещения. Работает также с ассоциативными массивами.

Ответ 4

Вот еще один простой однострочный, который делает это с помощью array_splice():

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

Ответ 5

//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);

Ответ 6

Там есть функция в комментариях руководства PHP для array_unshift, которая может быть использована для добавления элемента с ключом в начало массива:

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

Отсоедините элемент и снова вставьте его с помощью указанной выше функции:

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

Более общий подход может заключаться в использовании uksort для сортировки массива по ключам и предоставления собственной функции сортировки.

Ответ 7

Я предпочитаю array-merge с помощью решения @Mark.

$myArray = array_merge( ['one' => $myArray['one']], $myArray);