PHP: bir ilişkisel dizi öğeleri kopyalayabilir ve dizinin başında koyun nasıl?

4 Cevap php

Ben bir select menü kullanarak olacak ülkelerin bir dizi var:

array(
    [0] => " -- Select -- "
    [1] => "Afghanistan"
    [3] => "Albania"
    [4] => "Algeria"
    [39] => "Canada"
    [47] => "USA"
)
//etc...

Ben Kanada ve ABD girişlerinin kopyalarını oluşturmak kopyalamak ve benim dizinin önünde yerleştirmek istiyorum. Yani dizi bu gibi bakarak bitirmek gerekir:

array(
    [0] => " -- Select -- "
    [47] => "USA"
    [39] => "Canada"
    [1] => "Afghanistan"
    [3] => "Albania"
    [4] => "Algeria"
    [39] => "Canada"
    [47] => "USA"
)
//etc...

Dizi anahtarları veritabanında kendi kimliği karşılık, bu yüzden anahtarları değiştiremezsiniz. Bunu nasıl başarabiliriz?

Solution

Ben bu mümkün olmadığını fark etti. Eğer yinelenen bir anahtar ile bir dizide bir değer ayarlamak için çalıştığınızda, ilk anahtarın üzerine yazar. Ben farklı bir çözüm ile geldi, ama yüksek puan cevabı kabul etmiş.

4 Cevap

Bunun yerine id => değer olarak tek boyutlu bir dizi kullanarak, bir iki boyutlu dizi gibi kullanabilirsiniz

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

Elle html ekleyebilirsiniz. Sen o 2 elemanı dizi gönderme döngü kopyalama ve yapıştırma olabilir. Sen bir işlev içine döngü yapmak ve 2 eleman dizi ve daha sonra uzun süre dizi kullanarak diyebiliriz. [0 .. inf] => Array ($ key, $ value) daha sonra listesini kullanarak = $ dizi [x], edebilir hale elle eklemek için ($ key, $ val) anahtar değeri almak gibi bir dizi oluşturmak olabilir Bir sorun olmadan ABD ve kanada.

Açıkça çiftleri istediğiniz beri, sadece bir dizi değil, bir ilişkisel dizi kullanabilirsiniz.

array(
    [0] => " -- Select -- "
    [1] => array(name: "Afghanistan", code: 1)
    [2] => "array(name: Albania", code: 3)
)

ve böylece, ya da bir Country nesne oluşturmak ve bu bir dizi olabilir.

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

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

Kullanılabilirlik amaçları için, seçkin bir menüde iki ülkeyi listelemek için gerçekten iyi değil. Bu tür kafa karıştırıcı oluyor.

Ama bunun üzerinde kalp seti varsa, neden bu ile ilişkilendirilebilir dizinin yoluyla değil, döngü:

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

ve daha sonra

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.