这样可以达到你要的?获取array的键名,如果键名等于c才进入循环。

解决方案 »

  1.   

    $arr = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);$arr1 = array_slice($arr, 2); // 從arr的下標2開始取出foreach($arr1 as $key=>$val){
    echo $key.'='.$val.'<br>';
    }
      

  2.   


    $arr = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
    $flag = 0;
    foreach($arr as $key=>$val){
    if($key=='c'){
    $flag = 1;
    }
    if($flag==1){
    echo $key.'='.$val.'<br>';
    }
    }
      

  3.   

    這個好點。$arr = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
    $index = array_search('c',array_keys($arr));
    $arr1 = array_slice($arr, $index);foreach($arr1 as $key=>$val){
    echo $key.'='.$val.'<br>';
    }
      

  4.   

    其实 #5 的思路是对的:遍历一遍,不对指定键出现之前的数据做处理
    而 #6 的代码需要抄写指定键及以后的数据,至少要多消耗写内存
    $arr = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
    $flag = false;
    foreach($arr as $key=>$val){
        if(! ($flag = $flag ? $flag : $key == 'c')) continue;
        echo $key.'='.$val.'<br>';
    }
      

  5.   

    写成这样,更合理些$arr = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
    foreach($arr as $key=>$val){
        if(! ($flag = $key == 'c' ? true : !empty($flag))) continue;
        echo $key.'='.$val.'<br>';
    }
      

  6.   


    $a = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
    for (;;next($a)) {
        if ( key($a) == 'c' ) {
    while (list($key, $val) = each($a)) {
    echo "$key => $val<br />";
    }
    break;
    }
    }
      

  7.   

    有没有办法根据键名获得在数组中的位置指针
    做循环的时候直接从指针开始
    从头遍历有时间浪费,而且foreach创建副本申请了一块不必要内存
    6楼和9楼的代码很好了,不过用过汇编和C++的表示对核心代码有强迫症...
    吃完饭研究下php手册中的数组函数
      

  8.   

    $i = $v = 0;
    echo memory_get_usage(), PHP_EOL;
    $a = array(1,2,3,4,5,6,7);
    echo memory_get_usage(), PHP_EOL;foreach($a as $i=>$v) {
      echo $i, ' ', memory_get_usage(), PHP_EOL;
      break;
    }
    echo memory_get_usage(), PHP_EOL;
    123792
    124520
    0 124520
    124520显然 foreach创建副本申请了一块不必要内存 是不正确的
      

  9.   


    感谢xu大指正...刚学习的时候认为foreach是直接循环原数组,后来看到哪的帖子还是博客的,foreach是复制一份再遍历,内容真是忘了,$value创建副本应该不会刷新记忆...我仔细看看
      

  10.   


    原来是我脑补错了...
    <?phpfunction fn() {
        return array(1, 2, 3);
    }$fn = array(1, 2, 3);echo memory_get_usage() . '<br />';foreach (fn() as $k => $v) {
        echo memory_get_usage() . '<br />';
    }echo memory_get_usage() . '<br />';分别对全局变量的数组和函数返回的数组做测试,结果是不一样的,foreach会缓存函数运行结果,循环结束立刻释放,而遇到已存在变量就直接引用
      

  11.   

    那是当然的
    你 fn() 返回的数组总得要有人来接吧?
    没有给真实的变量,php也要把它放在堆栈中吧