算法,各种算法对一个数学很烂的人来说真是一个严重的打击!!!但谁让咱干程序这行呢(哭)。 搞了几小时,参照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>";