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

时间:2010-03-12 20:51:36

标签: php arrays

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

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,因此无法更改键。我怎样才能做到这一点?

解决方案

我意识到这是不可能的。当您尝试使用重复键在数组中设置值时,它会覆盖第一个键。我想出了一个不同的解决方案,但已经接受了最高级别的答案。

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

您可以在html中手动添加它们。您可以复制并粘贴循环,将其发送给2元素数组。您可以将循环转换为函数并使用2元素数组调用它,然后使用较长的数组调用它。你可以生成数组为[0..inf] =>数组($ key,$ value)然后使用list($ key,$ val)= $ arr [x]获取键值,使您能够手动添加USA和canada而不会出现问题。

答案 2 :(得分:1)

出于可用性的考虑,在选择菜单中两次列出国家真的不太好。这有点令人困惑。

但是如果你有心脏,为什么不用这个循环关联数组:

$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.

答案 3 :(得分:1)

由于您明确需要重复项,因此您可以使用数组而不是关联数组。

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);
...