Home >php教程 >php手册 >php 无限分类

php 无限分类

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOriginal
2016-06-06 19:45:541140browse

算法,各种算法对一个数学很烂的人来说真是一个严重的打击!!!但谁让咱干程序这行呢(哭)。 搞了几小时,参照http://yuepin.com/Explore/tree.php?该网址的说明实例,可算是明白一点,下边代码,给自己留个笔记。 注:因为是无限次的调用,所以我加了个判断

算法,各种算法对一个数学很烂的人来说真是一个严重的打击!!!但谁让咱干程序这行呢(哭)。

搞了几小时,参照 http://yuepin.com/Explore/tree.php? 该网址的说明实例,可算是明白一点,下边代码,给自己留个笔记。

注:因为是无限次的调用,所以我加了个判断,在层级$level=10的时候让他跳出。没有哪个正常网站会放超过10层的目录结构吧。

执行到static变量后,判断下当前层级,如果层级为0,那么表示这是最高级菜单,需要清空$arrcate的数据重新声明!

不这么做的话,在一张页面里调用两次或者多次,他会保留上次调用该方法时的值

<span> 1</span> <span>$yArr</span>    = <span>array</span><span>(
</span><span> 2</span>     1 => <span>array</span>('id'=>'1','parentid'=>0,'name'=>'一级栏目一'),
<span> 3</span>     2 => <span>array</span>('id'=>'2','parentid'=>0,'name'=>'一级栏目二'),
<span> 4</span>     3 => <span>array</span>('id'=>'3','parentid'=>1,'name'=>'二级栏目一'),
<span> 5</span>     4 => <span>array</span>('id'=>'4','parentid'=>1,'name'=>'二级栏目二'),
<span> 6</span>     5 => <span>array</span>('id'=>'5','parentid'=>2,'name'=>'二级栏目三'),
<span> 7</span>     6 => <span>array</span>('id'=>'6','parentid'=>3,'name'=>'三级栏目一'),
<span> 8</span>     7 => <span>array</span>('id'=>'7','parentid'=>3,'name'=>'三级栏目二'),
<span> 9</span>     8 => <span>array</span>('id'=>'8','parentid'=>2,'name'=>'二级栏目三'),
<span>10</span> <span>);
</span><span>11</span> 
<span>12</span> <span>/*</span><span>*
</span><span>13</span> <span> * 获取当前id的子ID
</span><span>14</span> <span> * @param array $data 原始数组
</span><span>15</span> <span> * @param int $id 当前id
</span><span>16</span> <span> * @param int $layer 当前层级
</span><span>17</span>  <span>*/</span>
<span>18</span> <span>function</span> genCate(<span>$data</span>, <span>$pid</span> = 0, <span>$level</span> = 0<span>)
</span><span>19</span> <span>{
</span><span>20</span>     <span>if</span>(<span>$level</span> == 10) <span>break</span><span>;
</span><span>21</span>     <span>$l</span>        = <span>str_repeat</span>("    ", <span>$level</span><span>);
</span><span>22</span>     <span>$l</span>        = <span>$l</span>.'└'<span>;
</span><span>23</span>     <span>static</span> <span>$arrcat</span>    = <span>array</span><span>();
</span><span>24</span>     <span>$arrcat</span>    = <span>empty</span>(<span>$level</span>) ? <span>array</span>() : <span>$arrcat</span><span>;
</span><span>25</span>     <span>foreach</span>(<span>$data</span> <span>as</span> <span>$k</span> => <span>$row</span><span>)
</span><span>26</span> <span>    {
</span><span>27</span>         <span>/*</span><span>*
</span><span>28</span> <span>         * 如果父ID为当前传入的id
</span><span>29</span>          <span>*/</span>
<span>30</span>         <span>if</span>(<span>$row</span>['parentid'] == <span>$pid</span><span>)
</span><span>31</span> <span>        {
</span><span>32</span>             <span>//</span><span>如果当前遍历的id不为空</span>
<span>33</span>             <span>$row</span>['name']    = <span>$l</span>.<span>$row</span>['name'<span>];
</span><span>34</span>             <span>$row</span>['level']    = <span>$level</span><span>;
</span><span>35</span>             <span>$arrcat</span>[]    = <span>$row</span><span>;
</span><span>36</span>             <span>//</span><span>var_array($arr);</span>
<span>37</span>             genCate(<span>$data</span>, <span>$psiff</span>, <span>$row</span>['id'], <span>$level</span>+1);<span>//</span><span>递归调用</span>
<span>38</span> <span>        }
</span><span>39</span> <span>    }
</span><span>40</span>     <span>return</span> <span>$arrcat</span><span>;
</span><span>41</span> <span>}
</span><span>42</span> 
<span>43</span> <span>$carr</span>    = genCate(<span>$yArr</span><span>);
</span><span>44</span> <span>echo</span> "<select>"<span>;
</span><span>45</span> <span>foreach</span>(<span>$carr</span> <span>as</span> <span>$row</span><span>)
</span><span>46</span> <span>{
</span><span>47</span>     <span>echo</span> "<option value="{<span">$row['id']}>"<span>;
</span><span>48</span>     <span>echo</span> <span>$row</span>['name'<span>];
</span><span>49</span>     <span>echo</span> "</option>"<span>;
</span><span>50</span> <span>}
</span><span>51</span> <span>echo</span> "</select>";
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn