如何创建具有键值对的数组?


117

如何将键值对添加到数组?

这行不通:

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

因为它给了我:

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

我期望:

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

2
代表更多的人可以编辑此问题并修复换行符吗?
Brian Ramsay

Answers:


150

使用方括号语法

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

$row["datasource_id"]$row["title"]存储值的键。


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

12
这个简单的答案对我很好。
Blowsie

该解决方案的唯一优点是,即使您具有整数键,也只能将键值对添加到数组的末尾。PHP数组是有序的,因此,如果要在数组前添加键值对,则必须执行以下操作:$data = ['user_email' => joy@cargomar.org'] + $data
totymedli

16

我的PHP有点生锈,但是我相信您正在寻找索引分配。只需使用:

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

在PHP中,数组实际上是映射,其中的键可以是整数或字符串。有关更多信息,请查看PHP:数组-手册


2

您可以将单个值数组键值创建为

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

在while循环内部,然后array_merge在循环中使用函数来组合每个新$new_row数组。


1

您可以在应用程序中使用此功能将键添加到索引数组。

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函数。如果您想添加多个项目,它可以正常工作。只需尝试一下,它对我有用

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

}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.