多维数组上的array_unshift

时间:2016-10-28 19:59:48

标签: php arrays

对于多维数组,我有var_dump的结果:

array (size=6)
  'sambalpur.in.net' => 
    array (size=2)
      'classkey' => string 'indotnet' (length=8)
      'status' => string 'available' (length=9)
  'sambalpur.com' => 
    array (size=2)
      'classkey' => string 'domcno' (length=6)
      'status' => string 'regthroughothers' (length=16)
  'sambalpur.info' => 
    array (size=2)
      'classkey' => string 'dominfo' (length=7)
      'status' => string 'regthroughothers' (length=16)
  'sambalpur.net' => 
    array (size=2)
      'classkey' => string 'dotnet' (length=6)
      'status' => string 'regthroughothers' (length=16)
  'sambalpur.biz' => 
    array (size=2)
      'classkey' => string 'dombiz' (length=6)
      'status' => string 'available' (length=9)
  'sambalpur.in' => 
    array (size=2)
      'classkey' => string 'dotin' (length=5)
      'status' => string 'regthroughothers' (length=16)

现在说我想将这个特定的数组转移到数组的开头:

'sambalpur.biz' => 
        array (size=2)
          'classkey' => string 'dombiz' (length=6)
          'status' => string 'available' (length=9)

我试过了:

array_unshift($array,array('sambalpur.biz'));

但我得到的是这样的:

array (size=7)
  0 => 
    array (size=1)
      0 => string 'sambalpur.biz' (length=13)
  'sambalpur.in.net' => 
    array (size=2)
      'classkey' => string 'indotnet' (length=8)
      'status' => string 'available' (length=9)
  'sambalpur.com' => 
    array (size=2)
      'classkey' => string 'domcno' (length=6)
      'status' => string 'regthroughothers' (length=16)
  'sambalpur.info' => 
    array (size=2)
      'classkey' => string 'dominfo' (length=7)
      'status' => string 'regthroughothers' (length=16)
  'sambalpur.net' => 
    array (size=2)
      'classkey' => string 'dotnet' (length=6)
      'status' => string 'regthroughothers' (length=16)
  'sambalpur.biz' => 
    array (size=2)
      'classkey' => string 'dombiz' (length=6)
      'status' => string 'available' (length=9)
  'sambalpur.in' => 
    array (size=2)
      'classkey' => string 'dotin' (length=5)
      'status' => string 'regthroughothers' (length=16)

移动阵列的正确方法是什么?

3 个答案:

答案 0 :(得分:3)

我以为我以前做过这件事,但找不到副本:

$array = array_splice($array,
                      array_search('sambalpur.biz', array_keys($array)), 1) + $array;
  • 使用array_keys()
  • 获取数字索引的键数组
  • 使用sambalpur.biz
  • 在返回的数组中搜索array_search()
  • 使用返回的索引将该元素剪切为array_splice()
  • 将其添加到现有阵列

不要恐慌

相同
$array = array_merge(array('sambalpur.biz' => $array['sambalpur.biz']), $array);

无需取消设置,因为插入顺序决定哪个键会覆盖另一个键,因此这个键会覆盖前一个键。

答案 1 :(得分:3)

您可以使用要在比较函数中移动到开头的特定键来uksort数组。

$key = 'sambalpur.biz';
uksort($array, function($a, $b) use ($key) {
    if ($a == $key) return -1;
    if ($b == $key) return 1;
    return 0;
});

这应该将该项目移到开头而不改变其他项目的顺序。

另一种可能性是删除子数组,然后将主数组合并到它上面。

$key = 'sambalpur.biz';
$x = $array[$key];
unset($array[$key]);
$array = array_merge([$key => $x], $array);

答案 2 :(得分:1)

这个问题似乎源于你传递的array_unshift()重建索引元素。如果您想将第二个数组添加到第一个数组并保留索引,可以使用+运算符($firstArray = $secondArray + $firstArray);