foreach、count、explode(对无限级分类的语法注释-显示无限级效果)
foreach ($array as $key => $value)
foreach仅能用于数组。
每次循环中,当前单元的键名也会在每次循环中被赋给变量$key。
当前单元的值被赋给$value。
<!DOCTYPE html>
<html>
<body> <?php
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43"); foreach($age as $x=>$x_value) {
echo "Key=" . $x . ", Value=" . $x_value;
echo "<br>";
}
?> </body>
</html>
输出结果:

=> 是数组成员访问符号
-> 是对象成员访问符号
比如:
$array = array("site map"=>"map.php"); //定义了一个数组,包含一个数组成员:键名为site map,值为map.php
$this->$name = $value
$this 在php语言里是个特定的变量,它代表了类本身,->是访问其类成员的操作符,$this->$name = $value,这句代码意思是:将当前类的name变量的值设置为$value
获取数组的长度
<!DOCTYPE html>
<html>
<body> <?php
$cars=array("Volvo","BMW","Toyota");
echo count($cars);
?> </body>
</html>
结果是:3
关联数组
<!DOCTYPE html>
<html>
<body> <?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
?> </body>
</html>
结果是:Peter is 35 years old.
两种创建关联数组的方法:
or:
$age['Ben']="37";
$age['Joe']="43";
$age=array("Bill"=>"35","Steve"=>"37","Peter"=>"43");
foreach($age as $x=>$x_value){}
变量age是x x代表Bill,Steve,Peter等
$age['Bill','Steve','Peter'等]="35","37","43"等
重点:
foreach($list as $key=>$value){
$list[$key]['count']=count(explode('-',$value['bpath']));
}
第一行是循环list的键名和值
explode函数
例子
在本例中,我们将把字符串分割为数组:
<?php
$str = "Hello world. It's a beautiful day.";
print_r (explode(" ",$str));
?>
输出:
Array
(
[0] => Hello
[1] => world.
[2] => It's
[3] => a
[4] => beautiful
[5] => day.
)
定义和用法
explode() 函数把字符串分割为数组。
语法
explode(separator,string,limit)
| 参数 | 描述 |
|---|---|
| separator | 必需。规定在哪里分割字符串。 |
| string | 必需。要分割的字符串。 |
| limit | 可选。规定所返回的数组元素的最大数目。 |
count() 函数
定义和用法
count() 函数计算数组中的单元数目或对象中的属性个数。
对于数组,返回其元素的个数,对于其他值,返回 1。如果参数是变量而变量没有定义,则返回 0。如果 mode 被设置为 COUNT_RECURSIVE(或 1),则会递归底计算多维数组中的数组的元素个数。
语法
count(array,mode)
| 参数 | 描述 |
|---|---|
| array | 必需。规定要计数的数组或对象。 |
| mode |
可选。规定函数的模式。可能的值:
注释:该参数是 PHP 4.2 中加入的。 |
foreach($list as $key=>$value){
$list[$key]['count']=count(explode('-',$value['bpath']));
}
第一行是循环list的键名和值
第二行等号右边的意思是在'-'分割字符,要分割的字符串是bpath,最后计算分割后数组中元素的个数
bpath数组
$list=$cate->field("id,name,pid,path,concat(path,'-',id) as bpath")->order('bpath')->select();
concat
|
n. 合并多个数组;合并多个字符串
|
先直观的看下效果
$list=$menu->field("id,name,pid,path,concat(path,'-',id) as bpath")->order('bpath')->select();
//合并两个字段组合成一个临时字段bpath
//dump($list);


bpath为:
0-1 分割后为2
0-1-2 分割后为3
foreach($list as $key=>$value){
$list[$key]['count']=count(explode('-',$value['bpath']));
}
第一行是定义list的键名和值
第二行等号右边的意思是在'-'分割字符,要分割的字符串是bpath,最后计算分割后数组中元素的个数
第二行的意思是$list[$key]['count']等于2、3、4等,辈分越低,数字越大,因为bpath是$value的id,所以bpath为$list的值并循环
order('bpath')
按顺序排序
thinkphp的field方法的用法
- $Model->field('id,title,content')->select();
这里使用field方法指定了查询的结果集中包含id,title,content三个字段的值。执行的SQL相当于:
- SELECT id,title,content FROM table
$list=$cate->field("id,name,pid,path,concat(path,'-',id) as bpath")->order('bpath')->select();
查询id、name、pid、path、path-id(按顺序排序,无限极分类的排序效果)

两个大元素,一个大元素下面有五个小元素,分别正是:id、name、pid、path、path-id 模板里有两个模板引擎,分别是
<option value="{$vo['id']}">
<for start="0" end="$vo['count']">
{$vo['name']}
option 元素定义下拉列表中的一个选项(一个条目)。
option value 定义送往服务器的选项值。这个值就是id值。
看下前台源码
<option value="0">根栏目</option>
<option value="1">
123</option><option value="2">
456</option><option value="4">
111</option><option value="3">
789</option></select><br />
name和 是重点
在html里是空格的意思
<volist name="alist" id="vo">
对应
$this->assign('alist',$list);
assign
vt.分派,选派,分配; 归于,归属; [法律] 把(财产,权利、利息)从一人转让给另一人; 把…编制;
n.[常用复数][法律]受让人,接受财产等转让的人,受托者;
$list=$cate->field("id,name,pid,path,concat(path,'-',id) as bpath")->order('bpath')->select();
<for start="0" end="$vo['count']">
</for>
http://doc.thinkphp.cn/manual/for.html
用法:
- <for start="开始值" end="结束值" comparison="" step="步进值" name="循环变量名" >
- </for>
<form action="__URL__/add" method="post">
请选择父级栏目:<select name="pid" size="20">
<option value="0">根栏目</option>
<volist name="alist" id="vo">
<option value="{$vo['id']}">
<for start="0" end="$vo['count']">
</for>
{$vo['name']}
</option>
</volist>
</select><br />
新的栏目名称:<input type="text" name="name" /><br />
<input type="submit" value="添加栏目" />
</form>
- <for start="1" end="100">
- {$i}
- </for>
解析后的代码是
- for ($i=1;$i<100;$i+=1){
- echo $i;
- }
foreach、count、explode(对无限级分类的语法注释-显示无限级效果)的更多相关文章
- bootstrap无限级分类 jq拓展 之前的无限级分类的封装版~
git地址:https://github.com/zhangjiahao93/jQ.select HTML部分 <!DOCTYPE html> <html> <head ...
- 无限级分类Asp.net Mvc实现
无限级分类Asp.net Mvc实现 无限级分类涉及到异步加载子类.加载当前类和匹配问题,现在做一个通用的实现. (一) 效果如下: (二)设计.实现及使用 (1)数据库 (a)表设计db ...
- MVC无限级分类01,分层架构,引入缓存,完成领域模型与视图模型的映射
本系列将使用zTree来创建.编辑关于品牌.车系.车型的无限级分类,使用datagrid显示,源码在github.先上最终效果: datagrid显示所有记录.分页,提供添加.修改.删除按钮,并提供简 ...
- ThinkPHP自动填充实现无限级分类的方法
这篇文章主要介绍了ThinkPHP自动填充实现无限级分类的方法,是ThinkPHP项目开发中非常实用的一个技巧,需要的朋友可以参考下 本文实例展示了ThinkPHP自动填充实现无限级分类的方法,是 ...
- PHP无限级分类的实现(不使用递归)
无限级分类在开发中经常使用,例如:部门结构.文章分类.无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 在 ...
- thinkphp实现无限级分类
普通的方法(采用for和foreach) //显示 foreach($data as $k=>$v){ //str_repeat()函数用于把字符串重复指定的次数 $data[$k]['titl ...
- CMSPRESS-PHP无限级分类2
原文章地址:http://www.thinkphp.cn/code/170.html 超级无限分类 使用简单 效率极高 核心代码10行不到 另外 求这个分类的不足,和更高效简单的无限分类方法 ^_^ ...
- MVC无限级分类02,增删改查
继上一篇"MVC无限级分类01,分层架构,引入缓存,完成领域模型与视图模型的映射",本篇开始MVC无限级分类的增删改查部分,源码在github. 显示和查询 使用datagrid显 ...
- 左右值无限级分类 MVC + EntityFramework 的简单实现
在度娘上查了大半个月的资料,最后发现每个网友分享的文章都有一定的错误(PS:大家是故意的么?).最后是在看了一个ASP版本后知道了大概流程:看了一个存储过程实现的文章后知道了大概需要的功能:看了一个S ...
随机推荐
- cscope使用技巧
1.执着cscope.files文件,对源码目前全文件搜索 find `pwd` -type f > cscope.files `pwd`生成当前目录的绝对路径,这样在cs命令里面就可以不用写那 ...
- [na]802.1x协议无线认证协议&dot1x有线认证实验
以前搞无线时候,会涉及到无线client接入方式的认证协议. 认证方式+加密方式+有线的dot1x. 注:以前都是doc粘贴到博客的,加上没写博客的习惯,因此会比较乱. EAP(扩展认证协议)是什么? ...
- [MySQL] MySQL中关于外键报错的解决和建议
一.缘由 今天在恢复从库和主库不同步的数据时,看到关于外键的报错. ERROR 1451 (23000): Connot delete or update a parent row: a foreig ...
- jquery+ashx checkbox 单选判断是否true 和 false 传值操作
示例图: html标签代码: <p></p> <label for="checkbox" style="float:left" & ...
- C++ 容器类 vector使用
vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法: 1.文件包含: ...
- Mac OSX系统、Linux、Windows命令行教程
目录 Mac OSX系统.Linux.Windows命令行教程 一.各系统终端的使用方法 二.各系统命令的功能 Mac OSX系统.Linux.Windows命令行教程 用你的终端做一些事情 (com ...
- [转]手工实现RTTI
运行时的动态类型检查(RTTI,Run Time Type Indentifiation)是c++中提供的一项语言机制,它主要用于判断多态对象的具体类型. 为什么不使用c++提供的RTTI功能 但c ...
- 第九章 搭建Hadoop 2.2.0版本HDFS的HA配置
Hadoop中的NameNode好比是人的心脏,非常重要,绝对不可以停止工作.在hadoop1时代,只有一个NameNode.如果该NameNode数据丢失或者不能工作,那么整个集群就不能恢复了.这是 ...
- How-to: Tune Your Apache Spark Jobs (Part 1)
Learn techniques for tuning your Apache Spark jobs for optimal efficiency. When you write Apache Spa ...
- eclipse 项目中的java文件没有在WEB-INF目录下的classes中 生成相对应的编译后的类
1.首先确定project->Build Automatically是否勾选上: 2.执行完第一步之后测试一下看是否能编译,如果还是不能,则进行手动编译: 3,进入clean对话框,选择Cle ...