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.

两种创建关联数组的方法:

$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

or:

$age['Peter']="35";
$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

可选。规定函数的模式。可能的值:

  • 0 - 默认。不检测多维数组(数组中的数组)。
  • 1 - 检测多维数组。

注释:该参数是 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方法的用法

  1. $Model->field('id,title,content')->select();

这里使用field方法指定了查询的结果集中包含id,title,content三个字段的值。执行的SQL相当于:

  1. 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">
&nbsp;&nbsp;&nbsp;&nbsp;123</option><option value="2">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;456</option><option value="4">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;111</option><option value="3">
&nbsp;&nbsp;&nbsp;&nbsp;789</option></select><br />

name和&nbsp;是重点

&nbsp;在html里是空格的意思

<volist name="alist" id="vo">

对应

$this->assign('alist',$list);

assign

[英][əˈsaɪn][美][əˈsaɪn]

vt.分派,选派,分配; 归于,归属; [法律] 把(财产,权利、利息)从一人转让给另一人; 把…编制;

n.[常用复数][法律]受让人,接受财产等转让的人,受托者;

$list=$cate->field("id,name,pid,path,concat(path,'-',id) as bpath")->order('bpath')->select();

<for start="0" end="$vo['count']">
&nbsp;&nbsp;
</for>

http://doc.thinkphp.cn/manual/for.html

用法:

  1. <for start="开始值" end="结束值" comparison="" step="步进值" name="循环变量名" >
  2. </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']">
&nbsp;&nbsp;
</for>
{$vo['name']}
</option>
</volist>
</select><br />
新的栏目名称:<input type="text" name="name" /><br />
<input type="submit" value="添加栏目" />
</form>
  1. <for start="1" end="100">
  2. {$i}
  3. </for>

解析后的代码是

  1. for ($i=1;$i<100;$i+=1){
  2. echo $i;
  3. }

foreach、count、explode(对无限级分类的语法注释-显示无限级效果)的更多相关文章

  1. bootstrap无限级分类 jq拓展 之前的无限级分类的封装版~

    git地址:https://github.com/zhangjiahao93/jQ.select HTML部分 <!DOCTYPE html> <html> <head ...

  2. 无限级分类Asp.net Mvc实现

    无限级分类Asp.net Mvc实现   无限级分类涉及到异步加载子类.加载当前类和匹配问题,现在做一个通用的实现.   (一) 效果如下:   (二)设计.实现及使用 (1)数据库 (a)表设计db ...

  3. MVC无限级分类01,分层架构,引入缓存,完成领域模型与视图模型的映射

    本系列将使用zTree来创建.编辑关于品牌.车系.车型的无限级分类,使用datagrid显示,源码在github.先上最终效果: datagrid显示所有记录.分页,提供添加.修改.删除按钮,并提供简 ...

  4. ThinkPHP自动填充实现无限级分类的方法

    这篇文章主要介绍了ThinkPHP自动填充实现无限级分类的方法,是ThinkPHP项目开发中非常实用的一个技巧,需要的朋友可以参考下   本文实例展示了ThinkPHP自动填充实现无限级分类的方法,是 ...

  5. PHP无限级分类的实现(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构.文章分类.无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 在 ...

  6. thinkphp实现无限级分类

    普通的方法(采用for和foreach) //显示 foreach($data as $k=>$v){ //str_repeat()函数用于把字符串重复指定的次数 $data[$k]['titl ...

  7. CMSPRESS-PHP无限级分类2

    原文章地址:http://www.thinkphp.cn/code/170.html 超级无限分类 使用简单 效率极高 核心代码10行不到 另外 求这个分类的不足,和更高效简单的无限分类方法 ^_^ ...

  8. MVC无限级分类02,增删改查

    继上一篇"MVC无限级分类01,分层架构,引入缓存,完成领域模型与视图模型的映射",本篇开始MVC无限级分类的增删改查部分,源码在github. 显示和查询 使用datagrid显 ...

  9. 左右值无限级分类 MVC + EntityFramework 的简单实现

    在度娘上查了大半个月的资料,最后发现每个网友分享的文章都有一定的错误(PS:大家是故意的么?).最后是在看了一个ASP版本后知道了大概流程:看了一个存储过程实现的文章后知道了大概需要的功能:看了一个S ...

随机推荐

  1. 卸载linux订阅包

    message日志信息: Oct :: oracledb1 rhsmd: In order for Subscription Manager to provide your system with u ...

  2. Linux内核(13) - 子系统的初始化之以PCI子系统为例

    由Kconfig这张地图的分布来看,PCI这块儿的代码应该分布在两个地方,drivers/pci和arch/i386/pci,两岸三地都属于一个中国,不管是drivers/pci那儿的,还是arch/ ...

  3. js面向对象编程:this究竟代表什么?

    在js中this的使用方法非常让人迷惑.有些像Java或者C#中的this,但又不全然一样.依照流行的说法this总是指向调用方法的对象. 1.纯粹函数调用. function ListCommon2 ...

  4. Creating the Help Page in ASP.NET Web API

    Introduction In this article we will define the process of creating the help page in the ASP .NET We ...

  5. 开源的报表系统easyreport的部署

    https://github.com/xianrendzw/EasyReport/blob/master/docs/manual/version2_0.md

  6. PHP位操作符

    二进制怎么算 http://www.doc88.com/p-474114598610.html 这个涉及到系统底层,WEB开发中几乎没用到,知道下有这个东西就好了.底层的东西解释总是简单不了的. 变量 ...

  7. SVN 版本服务器搭配全过程详解(含服务端、客户端)

    1.为什么要用VisualSVN Server,而不用Subversion? 回答: 因为如果直接使用Subversion,那么在Windows 系统上,要想让它随系统启动,就要封装SVN Serve ...

  8. 使用Apache JMeter压測Thrift

    我这里以我的一篇帖子为样例 http://blog.csdn.net/mn960mn/article/details/50476759 这里已经有服务端了,先启动服务端 首先增加maven的依赖 &l ...

  9. hdoj 1027 Ignatius and the Princess II 【逆康托展开】

    Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ( ...

  10. 向Oracle数据库插入一条数据

    这几天搞了一下Oracle数据库.可能用sql server习惯了,感觉好不方便.PL的界面友好度比sql server差远了 .既然都收购了PL了 为什么不给它做好一点呢?各种不便.郁闷 向Orac ...