Dizide yinelenen anahtar değerleri Başlarken

2 Cevap php

Bir dizi doldurmak için çalışırken nedense ben istenilen sonucu almıyorum. İlk bölümde, diziler bir dizi oluşturmak, her anahtar, "Biyoloji Eğitimi" gibi bir adı vardır. Ben o aynı diziyi doldurmak Ama nedense aynı dizi elemanı ama yeni bir tane kullanmak değildir.

13 dizi öğeleri (boş) ile bir dizi Yani part 1 sonuç. part 2 çalıştırmak sonra dizinin ilk 13 boş ve istediği gibi nüfuslu diğer 13 ile 26 dizi elemanları vardır.

Ben çalışmak istiyorum nedeni ilk 13 dizi elemanları sıralanır olmasıdır. Son 13 karmakarışık.

Bu neden oluyor ve bunu nasıl düzeltebilirim?

// PART 1 
// Create array of research areas
$research_result = db_fetch_array($research['research_query_result']);
$research['areas'] = explode("\n", $research_result['options']);
// Put the values as key and every key the new value of an array object
$research['areas'] = array_fill_keys($research['areas'], array());

// PART 2 
foreach($research['user'] as $uid => &$user_object) {
    $user_object->profile_research_areas = explode(", ", $user_object->profile_research_areas);
    foreach($user_object->profile_research_areas as $key => $area) {
        $research['areas'][$area][] = $uid;
    }
}

Sonuçta bir örneği dizi $ araştırma ['alanlarında'] içinde 2 elemanı bu gibi görünüyor olduğunu:

...(26 elements)
$research['areas']['Biology Education'] (0 elements)
$research['areas']['Biology Education'] (11 elements)
...

Bu açıktır umuyoruz.

2 Cevap

Bir fark neden görüyorum ama genelde ve benim öz karıştırmayın olamaz ve foreach döngüleri, yani bu deneyin ve bir fark yapar bakın:

// PART 2 
foreach($research['user'] as $uid => &$user_object) {
    $user_object->profile_research_areas = explode(", ", $user_object->profile_research_areas);
}

// PART 3
foreach($research['user'] as $uid => $user_object) {
    foreach($user_object->profile_research_areas as $key => $area) {
        $research['areas'][$area][] = $uid;
    }
}

Her aşamada dizide neler olduğunu görmek için, var_dump veya print_r kullanarak, orada bazı hata ayıklama çıktı koymak olabilir. Bunun ötesinde, ben soru ne olduğundan emin değilim. Hangi element çoğaltılamaz ediliyor? Ben bu olay gibi bir şey görebilirsiniz tek yer burada:

    $research['areas'][$area][] = $uid;

[] Kısmı "yeni bir öğe olarak $ araştırma [alanlar '] [$ alan] için $ uid append" anlamına gelir nerede.


güncelleme:

böylece bölüm 1 sonra böyle bir şey var konum:

$research = array(
   'areas' => array(
        'Biology education' => array(),
        'Chemistry education' => array()
   )
);

Eğer 2. bölümünde ortaya böyle bir şey istiyorum:

$research = array(
   'areas' => array(
        'Biology education' => array(42, 3.14159265, 2.181281),
        'Chemistry education' => array()
   )
);

fakat biten:

$research = array(
   'areas' => array(
        'Biology education' => array(),
        'Biology education' => array(42, 3.14159265, 2.181281), // <--duplicate entry?
        'Chemistry education' => array()
   )
);

ya da ben tamamen yanlış tahmin ediyorum? Bu durum buysa, o zaman büyük olasılıkla iki "Biyoloji Eğitimi" tuşları aslında aynı değildir. Belki bir yerde gömülü bir basılamaz karaktere sahiptir (null firar? Bir bir web çıkışı, vb görmüyoruz ..). Bir şey aksi takdirde PHP yerde bu ciddi bir aksaklık var, onları farklı tuşlar olmasına neden olacaktır.