文章列表除了在列表里要显示栏目名称以外在功能上与栏目列表几乎是一样的。

相信通过已学到的知识,一些聪明的同学已经能想到办法实现这个功能了。

不知道大家想到的办法是不是先通过while循环出文章列表,获得栏目id之后再在循环中通过栏目id查询出栏目名称?

完全没错!通过这样的方法完全可以实现出来,不过如果这么实现的话每循环一次都要查询一次数据库,从性能上考虑的话真的是下下策。访问人数少的时候还好,一旦人数变多了对数据库的访问压力是非常巨大的。

为了更有效的提升效率,我们可以把所有的栏目数据以数组的形式存储在一个变量中。但是每一条数据是一个数组,如何把多个数组存储在一个变量里了?

这时候我们就要用到多维数组的概念了。

多维数组

多维数组指的是包含一个或多个数组的数组。也就是说在数组里可以再放数组进去。

我们先来看一个典型的二维数组案例:

我们都知道array();函数用于创建数组,在上方代码中我们用array();创建了数组,并且在array();里面又包含了多个array();进去。我们可以通过这样的形式创建多个层级的数组。

数组创建好之后通过print_r();打印了该数组,HTML标签pre用于格式化显示打印结果。运行之后可以看到如下结果。

该二位数组中的值我们可以通过如下形式调用。

这个应该不难理解,我们知道可以通过变量+KEY的形式获得数组中的指定值,那在这里第一个括号里的就是第一层数组的KEY,第二个括号里的自然就是第二层数组的KEY。

但是通过以上形式创建数组,默认的KEY都是从0开始的,不太方便管理。我们也可以通过如下方法,指定KEY来创建:

在第一行我们先声明变量$cat_array为一个数组,这时候该变量是一个空数组。然后在第2、3行里通过变量名+KEY的形式为该数组中的自定义KEY创建了子数组。array(“cat_name”=>”娱乐”);形式之前有讲到过,也是定义KEY来创建数组的一种形式。

创建成功之后我们就可以通过如下方法调用了。

现在大家基本上可以猜到下一步要做的事情了,我们只需要把栏目表category的数据转换成上面这种形式的数组并赋值到一个变量里,就可以通过该变量方便调用了。

打开article_list.php页面,代码改成如下:

注意:以上代码均为同一页面内的代码,笔者为了方便查看把HTML部分和PHP部分区分开来了而已。

同样我们也可以发现,不同以往,这次笔者把PHP部分和HTML部分拆开来了,没有像以前那样全都写在ECHO语句里。同上,在一个页面内<?php到?>的格式是可以出现无数次的,我们可以根据自己的习惯拆分开来写以方便阅读。

另外第三段中的while语句中的echo部分与之前有所区别。之前是把所有的HTML代码和变量部分全都放在了一个引号内。但这次并没有那么做,反而用了很多个引号,并且把变量都放到了引号外面,中间有符号“.”(点)来隔开。

看下面两段代码:

其实这两段代码是一样的,在PHP中符号“.”是一个连接符。

通过echo来输出变量的时候是不需要在前后加引号或者单引号的,单引号更不可。如果在变量前后加单引号的话,单引号内的变量就不会被理解成是变量,而会被当作字符串,变量前面的美元符号“$”也会被当作一个普通的符号输出出来。双引号中的变量是会被解析成变量的。

在这里我之所以没有在变量前后加引号也有特殊原因,$cat_array[$j[cat_id]][cat_name]这段前后加上引号的话无法被正确的解析。记住,当用变量作为KEY的时候是不可以使用引号的。

而且通过上面的这种格式抒写的话代码阅读起来也方便很多,可以在编辑器中很清晰的看到变量在哪里,

代码分析:

先声明变量$cat_array为一个变量,通过循环获得数组赋值到变量$r,并把做为数组的变量$r赋值到数组变量$cat_array的不同key里,key里采用了$r[cat_id]来保证每一个key值可以对应其子数组中的cat_id值。

通过SELECT * FROM语句获得文章的结果集,并以创建时间add_time为基准降序DESC排序。最终结果中可以看到最新发布的文章在最上面。

再通过while循环语句循环输出文章列表,其中通过$cat_array[$j[cat_id]][cat_name]调用了二维数组$cat_array中对应cat_id的值。

PS:在文章列表的循环语句里我没有使用$r而改用了$j,这是因为$r在上面已经使用过一次,在下面就不能再重复使用了。当然$j可以随便起名,如$blabla~~~~

在HTML元素td里面通过属性width来定义了宽度,宽度值为数字(不带单位),其单位是像素,其中没有定义宽的单元格会自动适应宽度。在表格中只要为第一行单元格设置宽度即可让其他行中的单元格与第一行保持一致。

运行之后可以看到如下结果:

在这节课程中笔者选择了用二维数组形式来解决显示栏目名称的功能。并不是因为这是最完美的方法,而是为了带出多维数组这个知识点才这么做的。

PS:其实菜鸟技术有限,根本不知道什么是最完美的方法,囧~~~~,反正俺知道这么做起码比反复查询数据库来的好多了。

留个作业:

试着创建一个三维数组,并通过echo输出对应的值~

推荐阅读

在PHP用二维数组制作功课表表格,【转】PHP教程丨文章管理系统-文章列表(二维数组)...相关推荐

  1. 计算机二维动画实验原理,浅析计算机二维动画制作

    摘 要:最初的二维动画在制作上需要大量的人力还有较长的时间,相对的就是财力的消耗,在修改上也极度不便.计算机动画技术的发展提高了二维动画的制作效率,然而效率的提高却也让二维动画的质量变得不如以前.不过 ...

  2. 二维码制作方法有什么?看完这篇你就会了

    在这个信息高速化的时代,我们经常会接触到二维码,我们可以通过它乘坐交通工具.扫码支付.添加好友等等,已然成为我们生活中不可或缺的一部分.因为它的便捷性和高效性,我们可以很快打开需要的界面,那小伙伴会想 ...

  3. 猴赛礼™二维码礼品卡券提货兑换系统使用教程

    猴赛礼™二维码礼品卡券提货兑换系统使用教程 欢迎使用猴赛礼二维码提货系统 商户后台登录密码的修改 添加产品信息 卡券分类创建以及绑定产品 批量添加提货码(兑换码) 导出提货卡号和密码数据 大闸蟹提货卡 ...

  4. 这就是视频列表二维码,一个二维码搞定视频列表播放

    文章原创  转载请注明出处来自CSDN 2020-1-5  //  我是视频砖家,只关注视频应用. 我以前写视频二维码的教程,今天再上一个原创的视频列表二维码教程吧 // 视频列表二维码教程基于酷播云 ...

  5. 什么是二维数组?二维遍历?Java二维数组制作图片迷宫 使用如鹏游戏引擎制作窗口界面 附带压缩包下载,解压后双击start.bat启动...

    什么是二维数组? 数组当中放的还是数组 int [][] arr=new int[3][2]; 有3个小箱子,每个箱子2个格子. 看结果? int [][] arr=new int[3][2]; Sy ...

  6. c语言利用二维数组制作地图,用程序实现RPG背景地图二维数组构建

    朱艳萍 摘要:该文主要阐述了前端RPG开发中,当作为背景的地图较为复杂时,如何用程序的方法构建与背景地图一致的二维数组,采用图文结合论述其算法,并使用原生JavaScript语言实现. 关键词:二维数 ...

  7. 二维码制作并压缩下载

    需求:制作出多张二维码,并且压缩后下载.下载下来的压缩包解压后二维码能正常扫码 引入二维码制作的jar包 <dependency><groupId>com.google.zxi ...

  8. 下面使用计算机动画制作的,2020年最新电大《计算机二维动画制作》形考作业任务01-03网考试题及答案(10页)-原创力文档...

    最新电大<计算机二维动画制作>形考作业任务1-3网考试题及答案 1%通过 考试说明<计算机二维动画制作>形考共有3个任务.做考题时,利用本文档中的查找工具,把考题中的关键字输到 ...

  9. C语言试题二十二之定义了3×3的二维数组,并在主函数中赋值。函数的功能使求出数组周边元素的平均值并作为函数值返回给主函数中的s。

    1. 题目 定义了3×3的二维数组,并在主函数中赋值.函数的功能使求出数组周边元素的平均值并作为函数值返回给主函数中的s. 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试 ...

最新文章

  1. “.Net 社区虚拟大会”(dotnetConf) 2016 Day 3 Keynote: Scott Hanselman
  2. kafka的安装与启动运行
  3. python的QT5:如何用QT5实现菜单
  4. hello.cpp 第一个C++程序(本博客没有特指都是以QT测试)
  5. 第25版 OpenStack Yoga 已发布
  6. Intel 10nm为何迟迟不肯露面?良品率偏低
  7. Netty(二)(入门篇)传统的Bio编程
  8. 【Java数据结构与算法】第八章 快速排序、归并排序和基数排序
  9. 从谷歌浏览器复制不带样式_如何更新ETHERSCAN区块链浏览器上的代币信息
  10. 小猿圈python之python期末考试测试题(二)_小猿圈python之练习题
  11. 受够了碎片化,Salesforce决定只支持部分安卓设备
  12. C#之json序列化与反序列化
  13. springboot 微服务相关收藏
  14. 随手记--计算机网络原理
  15. JAVA ajax搜索框_JAVAEE AJAX实现搜素框关键字提示语功能
  16. 计算机网络笔记(含王道计算机考研课件)
  17. dub选项中文帮助.
  18. ImportError: /usr/local/lib/python3.7/dist-packages/cv2/cv2.cpython-37m-arm-linux-gnueabihf.so: unde
  19. 难以置信,网易首席架构师竟用了 500 页笔记,把网络协议给趣谈了
  20. 715. Range Module

热门文章

  1. ios 程序开发零散重点知识总结(一)暴走漫画制作笔记四
  2. 华为mate手机从解锁到root成功全步骤
  3. 配置与管理DNS服务器
  4. BIOS中英文对照表吐血推荐置顶
  5. 一键批量关闭 Linux 的 tty 的方法
  6. android版本8.1.0发布时间,安卓8.1.0是什么版本
  7. oneplus6刷机
  8. 金融数字化,到底需要何种解决方案?
  9. sql server 2014下载及安装步骤—图解
  10. SQL Server 索引基础知识 1 --- 记录数据的基本格式