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


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



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

7 ответов:

это работает:

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

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

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

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

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

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

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

$myArray = array_splice($myArray,array_search('one',array_keys($myArray)),1) + $myArray;
//source 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',
);
// set necessary order
$orderArray = array(
    'one' => '',
    'two' => '',
);
//apply it
$result = array_replace($orderArray, $myArray);
print_r($result);

в комментариях руководства 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 для сортировки массива по ключам и обеспечения собственной функции сортировки.

предпочитаю массив-слияние С решением @Mark.

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

Comments

    Ничего не найдено.