Anahtar-değer çiftleri ile nasıl bir dizi oluşturabilirim?


117

Bir diziye anahtar değer çiftlerini nasıl ekleyebilirim?

Bu işe yaramayacak:

public function getCategorieenAsArray(){

    $catList = array();

    $query = "SELECT DISTINCT datasource_id, title FROM table";
    if ($rs=C_DB::fetchRecordset($query)) {
        while ($row=C_DB::fetchRow($rs)) {
            if(!empty($row["title"])){
                array_push($catList, $row["datasource_id"] ."=>". $row["title"] );
            }
        }
     }

    return($catList);
}

Çünkü bana şunu veriyor:

Array ( [0] => 1=>Categorie 1 [1] => 5=>Categorie 2 [2] => 2=>Caterorie 2 ) 

Ve bekliyorum:

Array ( [1] =>Categorie 1 [5] => Categorie 2  ) 

2
Daha fazla temsilcisi olan biri bu soruyu düzenleyip satır sonunu düzeltebilir mi?
Brian Ramsay

Yanıtlar:


150

Kullanım köşeli ayraç sözdizimi :

if (!empty($row["title"])) {
    $catList[$row["datasource_id"]] = $row["title"];
}

$row["datasource_id"]değerinin $row["title"]saklandığı yerin anahtarıdır .


155
$data =array();
$data['user_code']  = 'JOY' ;
$data['user_name']  = 'JOY' ;
$data['user_email'] = 'joy@cargomar.org';

12
Bu basit cevap bunu benim için iyi açıklıyor.
Blowsie

Bu çözümdeki tek şey, tamsayı anahtarlarınız olsa bile, bu şekilde yalnızca dizinin sonuna anahtar-değer çiftleri ekleyebilmenizdir. Eğer bir anahtar-değer çifti ile bir dizi başa eklemek istiyorsanız, bunu yapmak zorunda PHP diziler, sıralanır: $data = ['user_email' => joy@cargomar.org'] + $data.
totymedli

16

PHP'm biraz paslanmış, ancak dizine alınmış atamaları aradığınıza inanıyorum. Sadece şunu kullanın:

$catList[$row["datasource_id"]] = $row["title"];

PHP dizilerinde, anahtarların tamsayılar veya dizeler olabileceği gerçekte eşlemlerdir. Daha fazla bilgi için PHP: Arrays - Manual sayfasına göz atın .


2

Tek değer dizisi anahtar / değer çiftini şu şekilde oluşturabilirsiniz:

$new_row = array($row["datasource_id"]=>$row["title"]);

while döngüsünün içinde ve ardından array_mergeher yeni $new_rowdiziyi birleştirmek için function in loop'u kullanın .


1

Dizine alınmış diziye anahtarlar eklemek için uygulamanızda bu işlevi kullanabilirsiniz.

public static function convertIndexedArrayToAssociative($indexedArr, $keys)
{
    $resArr = array();
    foreach ($indexedArr as $item)
    {
        $tmpArr = array();
        foreach ($item as $key=>$value)
        {
            $tmpArr[$keys[$key]] = $value;
        }
        $resArr[] = $tmpArr;
    }
    return $resArr;
}

0

Array_push işlevine gerek yok. Birden fazla öğe eklemek istiyorsanız, sorunsuz çalışıyor. sadece bunu dene ve benim için çalıştı

class line_details {
   var $commission_one=array();
   foreach($_SESSION['commission'] as $key=>$data){
          $row=  explode('-', $key);
          $this->commission_one[$row['0']]= $row['1'];            
   }

}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.