对于多维数组,我有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)
移动阵列的正确方法是什么?
答案 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
);