## 新建Teacher控制器 为了更好的将各个功能模块区分开,也为了更好的进行分工,我们再新建一个控制器Teacher,位于app\index\controller下,并在控制器Teacher中新建一个index方法,用于显示数据。 代码如下: ~~~ <?php namespace app\index\controller; use think\Db; // 数据库操作类 class Teacher { public function index() { return 'hello Teacher'; } } ~~~ 在写代码以前,我们想的是测试。 在写完代码以后,我们想的还是测试。 之所以返回了hello teacher,而没有去直接写具体的代码实现,目的也是为测试。在初步阶段,我们需要每写一点就测一点,保证自己的每行代码都和自己的预期结果一致。 测试结果如下图所示: ![](https://box.kancloud.cn/34c3d4f3bb40bffc2425b159a54127a8_318x79.png) ~~~ git checkout -f step3.2.3.1 ~~~ 执行上述命令后,上述示例代码信息如下: ![](https://box.kancloud.cn/8cb86961529ccaa5d69a161a08d1d934_683x258.png) ### 获取数据并输出 “获取教师表中所有数据”功能的实现代码如下: ~~~ <?php namespace app\index\controller; use think\Db; // 数据库操作类 /** * 教师管理 */ class Teacher { public function index() { // 获取教师表中的所有数据 $teachers = Db::name('teacher')->select(); // 查看获取的数据 var_dump($teachers); } } ~~~ **良好的注释习惯会使我们的编码事半功倍。** 测试结果如下图所示: ![](https://box.kancloud.cn/df227da007c0945a7b8781b14cc4ca9a_512x450.png) ~~~ git checkout -f step3.2.3.2 ~~~ 执行上述命令后,上述示例代码信息如下: ![](https://box.kancloud.cn/b668616d7e3c2f85d13091620ba2d3d7_805x330.png) **知识点**: <blockquote class="info"> <ol> <li>var_dump()这个函数既可以查看一般变量的值,又可以查看数组的值,还可以查看对象的值。在前期的学习过程中,我们将会大量的与它接触。</li> <li>你查看的结果,可能和我这里的形式表现不一致,如果是这样的话,请参考 http://www.mengyunzhi.com/share/php/107-xdebug.html 进行xdebug的安装。</li> </ol></blockquote> ### 解释一下输出的结果: ~~~ // var_dump()语句的位置是xxx/Teacher.php的第15行。 D:\xampp\htdocs\thinkphp5\application\index\controller\Teacher.php:15: // 变量类型是个array,即数组,“array (size=2)”表示这个数组中有两个子项。 array (size=2) // 键值为0的值是一个数组: 0 => // 变量类型是一个数组,这个数组中有7个子项 array (size=7) 'id' => int 1 // 键值为id的值为1,是int类型 'name' => string '张三' (length=6) // 键值为name的值为 张三,是string类型,长度为6 'sex' => int 0 'username' => string 'zhangsan' (length=8) 'email' => string 'zhangsan@mail.com' (length=17) 'create_date' => int 123123 'update_date' => int 123213 1 => array (size=7) 'id' => int 2 'name' => string '李四' (length=6) 'sex' => int 0 'username' => string 'lisi' (length=4) 'email' => string 'lisi@yunzhi.club' (length=16) 'create_date' => int 123213 'update_date' => int 1232 ~~~ 我们非常高兴的看到,var_dump()后的数据既有了变量类型,又有了变量值,将数据的结构非常直观的展示在了我们面前。当然了,如果从数据结构的角度上来,上述结构是一个典型的树状结构。 ### 树状数组结构的输出 ![](https://box.kancloud.cn/2016-06-13_575e5bec37c1d.png) 当我们想输出teachers中的0号元素时: ~~~ public function index() { // 获取教师表中的所有数据 $teachers = DB::name('teacher')->select(); // 查看获取的数据 var_dump($teachers[0]); } ~~~ 当我们想输出teachers中0号元素的name值时: ~~~ public function index() { // 获取教师表中的所有数据 $teachers = DB::name('teacher')->select(); // 查看获取的数据 var_dump($teachers[0]['name']); } ~~~ 当然了,如果变量的类型是字符串,那么我们还可以使用echo语句: ~~~ public function index() { // 获取教师表中的所有数据 $teachers = DB::name('teacher')->select(); // 用下面的语句,也可以直接返回给用户 echo $teachers[0]['name']; // 查看获取的数据 return $teachers[0]['name']; } ~~~ 测试结果如下图所示: ![](https://box.kancloud.cn/2016-06-13_575e5bec57e66.png) ~~~ git checkout step3.2.3.3 ~~~ 执行上述命令后,上述示例代码信息如下: ![](https://box.kancloud.cn/b5ac43a937142f849c2f5b3e7b66824d_796x383.png) 是的,数组就是这样的,一个典型的树状的数组结构。如果有一个N级数组,我们的输出方式可以是$teachers[0][0][0][1][1][1][1][0][0][0][1]........,只要有足够多的中括号,我们就可以输出到最后一项。 在多维数组中,只有叶子结点值的类型是非数组的,父结点的变量类型都是数组。