如何在 yii2 中创建名称值对数组

How to create name value pair array in yii2

我正在尝试按照以下格式在 yii2 中创建 Array

[
  ['id'=>'2', 'name'=>'ABC'],
  ['id'=>'3', 'name'=>'DEF']
]

到目前为止我已经尝试使用 ArrayHelper class 但是如果我 map 使用它而不是它从数组中删除 key 部分,我需要创建正是这种格式的数组

$data = User::find()
        ->where(['id' => $id])
        ->orderBy('id DESC')
        ->all();

正如你所知,在这段代码之后我得到了 ActiveRecord 格式的数据,所以我只需要将它们转换为 idname 数组,我不需要任何其他数据。

我试过这样做

 $data2 = ArrayHelper::map($data, 'id', 'name');

但是returns数据格式如下

[
  ['2'=>'ABC'],
  ['3'=>'DEF']
]

这个我也试过了

$data = MainCategory::find()->select('id,name')
 ->where(['id' => $id])
  ->orderBy('id DESC') 
 ->asArray()->all();

但它以以下格式返回数组

[
  '0' =>
      [
       'id'=>'2', 
       'name'=>'ABC'
      ],
  '1' =>
      [
       'id'=>'3', 
       'name'=>'DEF'
      ]
]

如何在 yii2 中获得 keyvalue 格式?

您可以像这样以数组形式获取数据:

$data = User::find()
    ->select('id, name')
    ->where(['id' => $id])
    ->orderBy('id DESC')
    ->asArray()
    ->all();

要创建纯 KEY => VALUE 数组,请使用 column() 方法:

$data = User::find()
    ->select(['name', 'id'])
    ->where(['id' => $id])
    ->orderBy('id DESC')
    ->asArray()
    ->indexBy('id')
    ->column();

第一个选定的列 [name] 将作为 VALUE 返回。