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.

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

$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. }
				
时间: 2024-11-11 03:27:18

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

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

HTML部分 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>多级联动封装</title> <link href="./css/bootstrap.css" rel="stylesheet"> <script src="./js/jque

mysql无限级分类实现基于汇报关系的信息管理权限

汇报关系和家族族谱的实现类似,采用树的数据结构进行定义,树采用递归进行定义.即要嘛是一个根节点,要嘛是由一个根节点和其子树组成.OA中的汇报关系也采用这种结构(与树稍有不同),除董事长外,其他人有且只有一个非其本人的直接主管,董事长的直接主管和越级主管是其本人.从以上的定义其实可以看出,汇报关系类似树,但又与树并不完全相同.除董事长外,其他汇报关系均是树形结构.树形结构采用递归定义,如采用递归查询是非常耗时的操作.比如以下需求: 1.主管可以看到所有直线下属的绩效信息: 针对以上需求,我们提出三

mysql 无限级分类实现思路

第一种方案: 使用递归算法,也是使用频率最多的,大部分开源程序也是这么处理,不过一般都只用到四级分类. 这种算法的数据库结构设计最为简单.category表中一个字段id,一个字段fid(父id).这样可以根据WHERE id = fid来判断上一级内容,运用递归至最顶层. 分析:通过这种数据库设计出的无限级,可以说读取的时候相当费劲,所以大部分的程序最多3-4级分类,这就足以满足需求,从而一次性读出所有的数据,再对得到数组或者对象进行递归.本身负荷还是没太大问题.但是如果分类到更多级,那是不可

php无限级分类实战——评论及回复功能

经常在各大论坛或新闻板块详情页面下边看到评论功能,当然不单单是直接发表评论内容那么简单, 可以对别人的评论进行回复,别人又可以对你的回复再次评论或回复,如此反复,理论上可以说是 没有休止,从技术角度分析很容易想到运用无限级分类技术存储数据,运用递归获取评论层级结构 数据,运用ajax实现评论页面交互,这里用thinkphp框架做个简单的demo练练手,为了简化流程 这里第三级评论不再提供回复功能,当然只要在这个基础上稍作修改就可以实现无限回复功能,主 要是view层样式修改较麻烦,需花些时间.

用迭代实现无限级分类

说起那个无限级分类,相信很多人都知道是什么东西,也曾经做过.我也相信,大家用得最多的实现方式就是做一个递归. 最近我也要做一个带无限级分类的菜单,但是我又不想用递归来做,所以我需要用其他方式来实现,那就是迭代了. 首先,我需要定义一个实体模型,这举一个省市无限级的例子: class Loaction { public int ID { get; set; } public int PID { get; set; } public string Name { get; set; } //地方名 p

无限级分类实现思路 (组织树的分级管理)

关于该问题,暂时自己还没有深入研究,在网上找到几种解决方案,各有优缺点. 第一种方案: 使用递归算法,也是使用频率最多的,大部分开源程序也是这么处理,不过一般都只用到四级分类.这种算法的数据库结构设计最为简单.category表中一个字段id,一个字段fid(父id).这样可以根据WHERE id = fid来判断上一级内容,运用递归至最顶层. 分析:通过这种数据库设计出的无限级,可以说读取的时候相当费劲,所以大部分的程序最多3-4级分类,这就足以满足需求,从而一次性读出所有的数据,再对得到数组

左右值编码,文章类别。无限级分类

在网上也搜了很多的例子,根据网络上的解释,慢慢摸索,用了将近2周的时间.笨人,没办法.有什么错的 请留言哦. 在yii php框架下 无限级分类. 通过网络上的,我们都了解到 实现文章 无限级分类,可以使用左右值编码,是通过二叉树的先序遍历 来得到 类别的,不使用递归.这种方法在 全部查询出 类别的时候,是很简单的. 先看数据库表格的设计. id name lft rht father_id layer 1 顶级分类 1 4 0 0 2 网站底部 2 3 1 1 注释: id --- 类别id

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

在度娘上查了大半个月的资料,最后发现每个网友分享的文章都有一定的错误(PS:大家是故意的么?).最后是在看了一个ASP版本后知道了大概流程:看了一个存储过程实现的文章后知道了大概需要的功能:看了一个SQL语句看到了比较直观的实现:看了一个php示例后才知道最复杂的一个功能的实现.每篇文章都是网友们自己正在使用或已经测试通过的,但都很巧,恰好关键地方就有点出错,不过还是感谢这些资料了,不然我也搞不出来. 因为查了很久的资料,基本上没有可用的,所以一直不敢直接写到项目的DAL里面,就直接在控制器里面

无限级分类实现思路

无限级分类实现思路 关于该问题,暂时自己还没有深入研究,在网上找到几种解决方案,各有优缺点. 第一种方案: 使用递归算法,也是使用频率最多的,大部分开源程序也是这么处理,不过一般都只用到四级分类.这种算法的数据库结构设计最为简单.category表中一个字段id,一个字段fid(父id).这样可以根据WHERE id = fid来判断上一级内容,运用递归至最顶层. 分析:通过这种数据库设计出的无限级,可以说读取的时候相当费劲,所以大部分的程序最多3-4级分类,这就足以满足需求,从而一次性读出所有