101

連想配列の要素を配列の先頭に移動するための最良の方法は何でしょうか?

たとえば、次の配列があるとします。

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

6 に答える 6

198

配列結合演算子(+)を使用して、既知のキー()を使用して元の配列を新しい連想配列に結合できますone

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

配列キーは一意であるため、2つの場所に存在することは不可能です。

配列演算子に関するドキュメントでさらに参照してください。

+演算子は、左側の配列に追加された右側の配列を返します。両方の配列に存在するキーの場合、左側の配列の要素が使用され、右側の配列の一致する要素は無視されます。

于 2012-06-30T17:55:49.950 に答える
7

数値の配列キーがあり、配列キーのインデックスを再作成する場合は、次のように配置することをお勧めしますarray_merge

$myArray = array_merge(array($key => $value) + $myArray );
于 2013-06-24T10:36:44.103 に答える
2

少し遅れましたが、誰かがそれを必要とする場合に備えて、私はこの小さなスニペットを作成しました。

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

ニーズに合わせて調整するか、使用してインデックスの設定を解除して移動します。連想配列でも動作します。

于 2014-03-19T07:55:23.340 に答える
2

これを使用してこれを行う別の簡単なワンライナーがありますarray_splice()

$myArray = array_splice($myArray,array_search('one',array_keys($myArray)),1) + $myArray;
于 2017-06-21T18:06:15.047 に答える
1

2つの配列がある場合、1番目に要素の2番目の配列の先頭に移動する要素がある場合は、次を使用できます。

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

コードサンプルは次のとおりです。

//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);
于 2017-08-05T20:33:50.900 に答える
-1

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を使用して配列をキーで並べ替え、独自の並べ替え機能を提供することです。

于 2012-06-30T17:58:59.410 に答える