1. <?php
  2. //03.php
  3. /****
  4. 燕十八 公益PHP讲堂
  5. 论 坛: http://www.zixue.it
  6. 微 博: http://weibo.com/Yshiba
  7. YY频道: 88354001
  8. ****/
  9. /***
  10. ====笔记部分====
  11. // 对于下面这个数组,每个单元有自己的id和地区名
  12. // 每个单元之间的地位是平等的
  13. // 因此谈不上谁是谁的上级/下级
  14. $area = array(
  15. array('id'=>1,'name'=>'安徽'),
  16. array('id'=>2,'name'=>'海淀'),
  17. array('id'=>3,'name'=>'濉溪县'),
  18. array('id'=>4,'name'=>'昌平'),
  19. array('id'=>5,'name'=>'淮北'),
  20. array('id'=>6,'name'=>'朝阳'),
  21. array('id'=>7,'name'=>'北京'),
  22. array('id'=>8,'name'=>'上地');
  23. // 我们为了表示地区之间的上下级关系,人为的加了一个字段
  24. // parent
  25. // parent的值 是 该栏目的父栏目的id
  26. // 找A栏目的子栏目时: 谁的parnet值等于A的id值,谁就是A的儿子
  27. $area = array(
  28. array('id'=>1,'name'=>'安徽','parent'=>0),
  29. array('id'=>2,'name'=>'海淀','parent'=>7),
  30. array('id'=>3,'name'=>'濉溪县','parent'=>5),
  31. array('id'=>4,'name'=>'昌平','parent'=>7),
  32. array('id'=>5,'name'=>'淮北','parent'=>1),
  33. array('id'=>6,'name'=>'朝阳','parent'=>7),
  34. array('id'=>7,'name'=>'北京','parent'=>0),
  35. array('id'=>8,'name'=>'上地','parent'=>2)
  36. );
  37. /***
  38. 安徽
  39. 淮北
  40. 濉溪县
  41. 北京
  42. 海淀
  43. 上地
  44. 昌平
  45. 朝阳
  46. ***/
  47. /**
  48. 无限级分类,牵涉3个应用
  49. 0是 找指定栏目的子栏目
  50. 1是 找指定栏目的子孙栏目,即子孙树
  51. 2是 找指定的栏目的父栏目/父父栏目....顶级栏目, 即家谱树
  52. **/
  53. $area = array(
  54. array('id'=>1,'name'=>'安徽','parent'=>0),
  55. array('id'=>2,'name'=>'海淀','parent'=>7),
  56. array('id'=>3,'name'=>'濉溪县','parent'=>5),
  57. array('id'=>4,'name'=>'昌平','parent'=>7),
  58. array('id'=>5,'name'=>'淮北','parent'=>1),
  59. array('id'=>6,'name'=>'朝阳','parent'=>7),
  60. array('id'=>7,'name'=>'北京','parent'=>0),
  61. array('id'=>8,'name'=>'上地','parent'=>2)
  62. );
  63. // 找子栏目
  64. function findson($arr,$id=0) {
  65. // $id栏目的儿子有些呢?
  66. // 答:数组循环一遍,谁的parent值 等于 $id,谁就是他儿子
  67. $sons = array(); // 子栏目数组
  68. foreach($arr as $v) {
  69. if($v['parent'] == $id) {
  70. $sons[] = $v;
  71. }
  72. }
  73. return $sons;
  74. }
  75. // print_r(findson($area,0));
  76. // 找子孙树
  77. // 用静态变量
  78. /*
  79. function subtree($arr,$id=0,$lev=1) {
  80. static $subs = array(); // 子孙数组
  81. foreach($arr as $v) {
  82. if($v['parent'] == $id) {
  83. $v['lev'] = $lev;
  84. $subs[] = $v; // 举例说找到array('id'=>1,'name'=>'安徽','parent'=>0),
  85. subtree($arr,$v['id'],$lev+1);
  86. }
  87. }
  88. return $subs;
  89. }
  90. // print_r(subtree($area,0,1));
  91. */
  92. function subtree($arr,$id=0,$lev=1) {
  93. $subs = array(); // 子孙数组
  94. foreach($arr as $v) {
  95. if($v['parent'] == $id) {
  96. $v['lev'] = $lev;
  97. $subs[] = $v; // 举例说找到array('id'=>1,'name'=>'安徽','parent'=>0),
  98. $subs = array_merge($subs,subtree($arr,$v['id'],$lev+1));
  99. }
  100. }
  101. return $subs;
  102. }
  103. $tree = subtree($area,0,1);
  104. foreach($tree as $v) {
  105. echo str_repeat(' ',$v['lev']),$v['name'],'<br />';
  106. }
  107. ?>
  108. <?php
  109. //04.php
  110. /****
  111. 燕十八 公益PHP讲堂
  112. 论 坛: http://www.zixue.it
  113. 微 博: http://weibo.com/Yshiba
  114. YY频道: 88354001
  115. ****/
  116. /***
  117. ====笔记部分====
  118. 再见 static
  119. ***/
  120. function t() {
  121. $age = 5;
  122. $age += 1;
  123. return $age;
  124. }
  125. echo t(),'<br />';
  126. echo t(),'<br />';
  127. echo t(),'<br />';
  128. /*
  129. 每调用一次t函数
  130. t函数就要初始化$age = 5;
  131. 并执行,
  132. 因此 6 6 6
  133. 函数就是个封装的执行体,前后执行,没有联系 这是正常的.
  134. 要想让$age 不每次初始化,可以使用static 静态变量
  135. */
  136. function st() {
  137. static $age = 5;
  138. $age += 1;
  139. return $age;
  140. }
  141. echo st(),'<br />';
  142. echo st(),'<br />';
  143. echo st(),'<br />';
  144. /***
  145. 在函数中声明的static 静态变量,
  146. 无论此函数调用多少次,只初始化一次.
  147. 以后就会直接沿用该变量,
  148. 这在递归时,很有用.
  149. static总结
  150. 1: 修饰类的属性与方法为静态属性,静态方法
  151. 2: static::method(), 延迟绑定
  152. 3: 在函数/方法中,声明静态变量用
  153. ***/
  154. ?>
  155. <?php
  156. //05.php
  157. /****
  158. 燕十八 公益PHP讲堂
  159. 论 坛: http://www.zixue.it
  160. 微 博: http://weibo.com/Yshiba
  161. YY频道: 88354001
  162. ****/
  163. /***
  164. ====笔记部分====
  165. 数组的加,和merge
  166. ***/
  167. $a = array('a','b');
  168. $b = array(2=>'c',3=>'d');
  169. print_r($a + $b);

分类: web

标签:   分类