将关联数组的任何元素移动到数组开头的最佳方法是什么?
例如,假设我有以下数组:
$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',
);
您可以使用数组联合运算符 ( +
) 使用已知键 ( one
将原始数组连接到新的关联数组。
$myArray = array('one' => $myArray['one']) + $myArray;
// or ['one' => $myArray['one']] + $myArray;
数组键是唯一的,因此它不可能存在于两个位置。
进一步请参阅有关数组运算符的文档:
+ 运算符返回附加到左侧数组的右侧数组;对于两个数组中都存在的键,将使用左侧数组中的元素,而右侧数组中的匹配元素将被忽略。
如果您有数字数组键并且想要重新索引数组键,最好将其放入array_merge
中,如下所示:
$myArray = array_merge(array($key => $value) + $myArray );
有点晚了,但以防有人需要它,我创建了这个小片段。
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;
}
只需调整它以满足您的需求,或者使用它并取消设置索引即可移动。也适用于关联数组。
这是另一个简单的单行代码,它使用 array_splice()
完成此操作:
$myArray = array_splice($myArray,array_search('one',array_keys($myArray)),1) + $myArray;
如果你有 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);
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 按键对数组进行排序,并提供您自己的排序函数。