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

php 无限分类

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBasal
2016-06-06 19:45:541140semak imbas

算法,各种算法对一个数学很烂的人来说真是一个严重的打击!!!但谁让咱干程序这行呢(哭)。 搞了几小时,参照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>";
Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn