我想在Yii2 map()方法中使用PHP for循环创建一个关联数组。
数组看起来像下面的格式 -
$listArray = [
['id' => '1', 'name' => 'Peter/5'],
['id' => '2', 'name' => 'John/7'],
['id' => '3', 'name' => 'Kamel/9'],
];
将在循环的每次迭代中更改id和名称。在这里,在循环中进行一些计算后,名称将始终保持自定义值。
最后,列表将在map()方法中使用,如下所示
$listData=ArrayHelper::map($listArray,'id','name');
我可以在使用Active Record查找列表数组后直接使用map()方法,然后在map()方法中使用它。但它没有让我使用自定义值作为name属性。
$listArray = UserList::find()
->where(['status' => 1])
->orderBy('name')
->all();
$listData=ArrayHelper::map($listArray,'id','name');
怎么能实现这个目标?直接源代码示例对我来说真的很棒。
提前致谢。
答案 0 :(得分:3)
我假设您想要查询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类:
$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
},
],
]);
答案 1 :(得分:1)
我认为通过在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
中拥有用户名列表的自定义规则。
答案 2 :(得分:0)
$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]);