如何使用 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]);
我想使用 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]);