You are here
Home > PHP

yii2.0 ArrayHelper ArrayHelper::map() 使用方法


ArrayHelper 继承 BaseArrayHelper 类,这里说一下ArrayHelper::map() 使用方法。

举个例子,下面有一张 teacher 表 在学科页面,要选择该学科的负责人,采用下拉列表的形式。

下面是 Teacher Model 的部分代码

<?php
namespace frontend\models;

use Yii;
use yii\helpers\ArrayHelper;  // 引入 ArrayHelper 类
/**
 * This is the model class for table "teacher".
 *
 * @property int $id 教师 id
 * @property string $tname 教师姓名
 * @property int $age 教师年龄
 * @property string $salary 工资
 * @property int $nation 民族
 */
class Teacher extends \yii\db\ActiveRecord
{
     public function getLists()
     {
     $res = $this->find()->select(['id','tname'])->asArray()->all();
     return ArrayHelper::map($res, 'id', 'tname');    // 这里制造适合 dropDownList 的数据容器
    }
}

下面是 Major (主修专业) 控制器部分代码

<?php
namespace frontend\controllers;

use frontend\models\Teacher;
use Yii;
....
/**
 * MajorController implements the CRUD actions for Major model.
 */
class MajorController extends Controller
{

    ...

    /**
     * Creates a new Major model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     * @return mixed
     */
    public function actionCreate()
    {
        $model = new Major();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        }

        $teachers = new Teacher();
        $masters = $teachers->getLists();  // 这里获取适合 dropDownList 的数据容器

        return $this->render('create', [
            'model' => $model,
            'masters' => $masters,
        ]);
    }
    ...
}

_form表单中的应用


<div class="major-form"> <?php $form = ActiveForm::begin(); ?> <?= $form->field($model, 'mname')->textInput(['maxlength' => true,'style'=>'width:250px']) ?> <?= $form->field($model, 'master')->dropDownList($masters) ?> <div class="form-group"> <?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?> </div> <?php ActiveForm::end(); ?> </div>

附,另一个例子(参考自:[Yii2小心肝儿]ArrayHelper之map详解(你不太用的第三个参数) – 话题 – Yii Framework 中文社区):

这是一个小组的成员表person。

id  realname    sex
1   张三  boy
2   李四  boy
3   王五  boy
4   小三  gril

我们想做这样一件事情,首先按照性别分组,每组里分别是一个人的姓名信息,通过map能轻易实现。

<?= ArrayHelper::map($persons,'id','realname','sex');

于是你看到了这样的结果

[
    'boy'=>[1=>'张三',2=>'李四',3=>'小五'],
    'girl'=>[4=>'小三'],
]

发表评论

Top