PHP:如何从关联数组中复制元素并将其放置在数组的开头?

PHP:如何从关联数组中复制元素并将其放置在数组的开头?,php,arrays,Php,Arrays,我将在选择菜单中使用一系列国家/地区: array( [0] => " -- Select -- " [1] => "Afghanistan" [3] => "Albania" [4] => "Algeria" [39] => "Canada" [47] => "USA" ) //etc...

我将在选择菜单中使用一系列国家/地区:

array(
    [0] => " -- Select -- "
    [1] => "Afghanistan"
    [3] => "Albania"
    [4] => "Algeria"
    [39] => "Canada"
    [47] => "USA"
)
//etc...
我想复制创建加拿大和美国条目的副本,并将它们放在阵列的前面。因此,阵列最终应如下所示:

array(
    [0] => " -- Select -- "
    [47] => "USA"
    [39] => "Canada"
    [1] => "Afghanistan"
    [3] => "Albania"
    [4] => "Algeria"
    [39] => "Canada"
    [47] => "USA"
)
//etc...
数组键对应于它们在数据库中的ID,因此我无法更改这些键。我怎样才能做到这一点

解决方案
我意识到这是不可能的。当您尝试在具有重复键的数组中设置值时,它将覆盖第一个键。我提出了一个不同的解决方案,但接受了最高评分的答案。

您可以在html中手动添加它们。您可以复制并粘贴循环,并将其发送到2元素数组。您可以将循环变成一个函数,然后使用2元素数组和更长的数组调用它。您可以将数组生成为[0..inf]=>array($key,$value),然后使用list($key,$val)=$arr[x)获取键值,这样您就可以毫无问题地手动添加美国和加拿大。

出于可用性的目的,在选择菜单中列出两个国家确实不是一个好方法。这有点让人困惑

但是,如果你已经下定决心了,为什么不使用以下命令在关联数组中循环:

$top_countries = array(
    [0] = "USA";
    [1] = "Canada";
)
然后

foreach($top_countries as $top_of_list) {
    foreach($list_of_countries as $this_country) {
        if($this_country == $top_of_list) {
            $stored_string .= // Select HTML formatting with $this_country;
        }
    }
}

// Pointer reset and rest of the code 
// to add rest of the countries.

因为您明确地想要重复,所以可以只使用数组而不是关联数组

array(
    [0] => " -- Select -- "
    [1] => array(name: "Afghanistan", code: 1)
    [2] => "array(name: Albania", code: 3)
)
依此类推,或者可以创建一个
Country
对象并拥有这些对象的数组

class Country {
    public $name;
    public $code;
    ..
}

$countries[] = new Country('USA', 47);
$countries[] = new Country('Canada', 39);
$countries[] = new Country('Afghanistan', 1);
...

您可以使用二维数组,而不是使用一维数组作为id=>value,例如

$countries = array(
    0 => array(
                   'country_id' => 47,
                   'country' => 'USA'
               ),
    1 => array(
                   'country_id' => 39,
                   'country' => 'Canada'
               ),
    2 => array(
                   'country_id' => 1,
                   'country' => 'Afghanistan'
               ),
    ......
);

关联数组只能包含每个键一次。您可能不应该为了显示而篡改数组。肯尼特,你是对的……我没有意识到这一点,但我正在努力实现的目标是不可能的。