请问这段代码写的有什么问题,不就是给$url赋值么,为何有人看到后会骂娘foreach ( $arr as $k => &$v ) {
if ($k == '2' || $k == '3') {
if ($v ['url'] != '') {
$url = $v ['url'];
} else {
$url = "/Home/index/getInfo/id/" . $v ['id'];
}
}
}

解决方案 »

  1.   


    //估计是嵌套太多,有些人不喜欢
    foreach ( $arr as $k => &$v ) {
    if ($k == '2' || $k == '3') {
    $url = $v['url'] != '' ? $v['url'] : '/Home/index/getInfo/id/'.$v['id'];
    }
    }
      

  2.   

    你只需检查 $arr 最后一个元素就够了
      

  3.   

    $v = end($arr);
    $url = (key($arr) == 2 || key($arr) == 3) && $v['url'] ? $v['url'] : "/Home/index/getInfo/id/" . $v ['id'];
      

  4.   

    你这循环出来 其实生效的只有最后一个。你是想生成多个url还是就最后一个啊‘
      

  5.   

    看代码楼主是想返回k=2或k=3,如url不为空返回url,否则url是用id拼接。因为你执行每一次循环后,即使条件满足,还是回继续执行下一个循环,而不是跳出。
    所以url只会是你最后一次符合条件的循环的数据。个人感觉应该是加break的,这样才合理
    如果按这个需求,可以这样改<?php
    foreach($arr as $k = >&$v) {
        if ($k == '2' || $k == '3'){
         $url = $v['url']!=''? $v['url'] : "/Home/index/getInfo/id/".$v['id'];
         break;
        }
    }
    ?>