如何使用 PHP for 循环在 Yii 2 数组 map() 中使用关联数组?

How to make associative array using PHP for loop to use in Yii 2 array map()?

我想使用 PHP for 循环创建一个关联数组以在 Yii2 map() 方法中使用。

数组看起来像波纹管格式-

$listArray = [
  ['id' => '1', 'name' => 'Peter/5'],
  ['id' => '2', 'name' => 'John/7'],
  ['id' => '3', 'name' => 'Kamel/9'],
];

id 和 name 将在循环的每次迭代中更改。在这里,在循环内部进行一些计算后,名称将始终保留自定义值。

最后,列表将在 map() 方法中使用,如下所示

$listData=ArrayHelper::map($listArray,'id','name');

我可以在使用Active Record 找到列表数组后直接使用map() 方法,然后在map() 方法中使用它。但它并没有给我使用名称属性自定义值的方法。

$listArray = UserList::find()
        ->where(['status' => 1])
        ->orderBy('name')
        ->all();

$listData=ArrayHelper::map($listArray,'id','name');

如何实现?直接源代码示例对我来说真的很棒。

提前致谢。

我假设您想查询 ActiveRecord 中的数据,然后将数据传输到一个简单的数组中。

$listData = [];

$listArray = UserList::find()
    ->where(['status' => 1])
    ->orderBy('name')
    ->all();

foreach($listArray as $user){
    $customName = $user->name . $this->someCalculation();
    $listData[] = ["id" => $user->id, "name" => $customName]; 
}

或者您可以像这样使用 ArrayHelper class:

$listArray = UserList::find()
    ->where(['status' => 1])
    ->orderBy('name')
    ->all();

$listData = ArrayHelper::toArray($listArray , [
    'app\models\UserList' => [
        'id',
        'name' => function ($listArray ) {
            return $listArray->word . strlen($listArray->word);  // custom code here
        },
    ],
]);

我认为通过在 UserList 模型中定义自定义计算规则来执行此操作的首选方法是:

public function getCustomRuleForUser(){
  // Do what ever you want to do with your user name.
  return $this->name.'Your custom rule for name';

}

并用作:

  $userList = UserList::find()->all(); 
  $listData=ArrayHelper::map($userList,'id','customRuleForUser');

现在,您在 $listData 中有了用户名列表的自定义规则。

$model_userprofile = UserProfile::find()->where(['user_id' => Yii::$app->user->id])->one();

        $model_userprofile1 = UserProfile::find()
            ->select('user_id')
            ->where(['group_id' => $model_userprofile->group_id])->all();

        $listData = [];

        foreach($model_userprofile1 as $user){
            $id = $user->user_id;
            $listData[] = ["id" => $id];
        }


        $dataProvider = new ActiveDataProvider
        ([
            'query' => User::find()
               ->select('id,username,email')
               ->Where(['id' => $listData])
               ->orderBy(['id' => SORT_DESC]),
            'pagination' => ['pagesize' => 15]]);

        return $this->render('index',['dataProvider'=> $dataProvider]);