通过关联键将数组元素移动到数组的开头

时间:2013-09-30 17:47:19

标签: php arrays

到目前为止,我所有的研究都表明,如果不编写诸如解决方案here

之类的冗长函数,就无法实现这一目标。

当然有一种更简单的方法可以使用预定义的PHP函数实现这一目标吗?

为了清楚起见,我正在努力做到以下几点:

$test = array(
    'bla' => 123,
    'bla2' => 1234,
    'bla3' => 12345
);

// Call some cool function here and return the array where the 
// the element with key 'bla2' has been shifted to the beginning like so
print_r($test);
// Prints bla2=1234, bla=>123 etc...

我已经看过使用以下功能,但到目前为止还没有能够自己编写解决方案。

  1. array_unshift
  2. array_merge
  3. 总结

    我想:

    1. 将元素移动到数组的开头
    2. ...同时保持关联数组键

2 个答案:

答案 0 :(得分:8)

对我来说,这似乎是搞笑。但是你走了:

$test = array(
    'bla' => 123,
    'bla2' => 1234,
    'bla3' => 12345
);

//store value of key we want to move
$tmp = $test['bla2'];

//now remove this from the original array
unset($test['bla2']);

//then create a new array with the requested index at the beginning
$new = array_merge(array('bla2' => $tmp), $test);

print_r($new);

输出如下:

Array
(
    [bla2] => 1234
    [bla] => 123
    [bla3] => 12345
)

你可以把它变成一个简单的函数,它接受一个键和一个数组,然后输出新排序的数组。

<强>更新

我不确定为什么我没有默认使用uksort,但你可以做得更清洁一点:

$test = array(
    'bla' => 123,
    'bla2' => 1234,
    'bla3' => 12345
);

//create a function to handle sorting by keys
function sortStuff($a, $b) {
    if ($a === 'bla2') {
        return -1;
    }
    return 1;
}

//sort by keys using user-defined function
uksort($test, 'sortStuff');

print_r($test);

返回与上面代码相​​同的输出。

答案 1 :(得分:0)

这不是Ben的问题的答案(这是不是很糟糕?) - 但这是为了将项目列表放在列表顶部而优化的。

  /** 
   * Moves any values that exist in the crumb array to the top of values 
   * @param $values array of options with id as key 
   * @param $crumbs array of crumbs with id as key 
   * @return array  
   * @fixme - need to move to crumb Class 
   */ 
  public static function crumbsToTop($values, $crumbs) { 
    $top = array(); 
    foreach ($crumbs AS $key => $crumb) { 
      if (isset($values[$key])) { 
        $top[$key] = $values[$key]; 
        unset($values[$key]); 
      } 
    } 
    return $top + $values;
  }