PHP:将关联数组元素移动到数组的开头

85 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',
);
Run Code Online (Sandbox Code Playgroud)

我想要做的是将'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',
);
Run Code Online (Sandbox Code Playgroud)

Mar*_*ich 168

这有效:

$myArray = array('one' => $myArray['one']) + $myArray;
Run Code Online (Sandbox Code Playgroud)

  • @squarecandy数组键是唯一的,因此它不可能存在于两个位置.另请参阅http://php.net/manual/en/language.operators.array.php - "+运算符返回附加到左侧数组的右侧数组;对于两个数组中存在的键,将使用左侧数组中的元素,并且将忽略右侧数组中的匹配元素." (11认同)
  • 这很棒!但为什么这有效呢?看起来你最终会在数组的开头用'one'和**在原来的位置... (4认同)
  • @andrewtweber不,我没有,但我做了一些测试,发现与Emil的方法相比,它快3倍,占用了一半的内存.我还发现,将相同的元素移动到数组的末尾需要花费20%的时间. (3认同)
  • 知道这个大O的表现是什么? (2认同)

tra*_*nte 5

如果您有数字数组键并想重新索引数组键,最好将其放入 array_merge这样:

$myArray = array_merge(array($key => $value) + $myArray );
Run Code Online (Sandbox Code Playgroud)