PHP数组 怎么从指定位置开始查询? 这样可以达到你要的?获取array的键名,如果键名等于c才进入循环。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $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>';} $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>'; }} 這個好點。$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>';} 其实 #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>';} 写成这样,更合理些$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>';} $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; }} 有没有办法根据键名获得在数组中的位置指针做循环的时候直接从指针开始从头遍历有时间浪费,而且foreach创建副本申请了一块不必要内存6楼和9楼的代码很好了,不过用过汇编和C++的表示对核心代码有强迫症...吃完饭研究下php手册中的数组函数 $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;1237921245200 124520124520显然 foreach创建副本申请了一块不必要内存 是不正确的 感谢xu大指正...刚学习的时候认为foreach是直接循环原数组,后来看到哪的帖子还是博客的,foreach是复制一份再遍历,内容真是忘了,$value创建副本应该不会刷新记忆...我仔细看看 原来是我脑补错了...<?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会缓存函数运行结果,循环结束立刻释放,而遇到已存在变量就直接引用 那是当然的你 fn() 返回的数组总得要有人来接吧?没有给真实的变量,php也要把它放在堆栈中吧 php为什么不设计成编译后再运行 php获取三维数组的值 mysql_num_rows的问题 怎样用正则替换掉url某个参数? 在Linux下升级PHP4要注意什么? 求两个函数:1.返回当前浏览的网页的存放路径,2.返回本网页名子 在线等... ie解析utf-8编码问题导致崩溃 写sesion文件时出错,请高手帮助!!在线等!! 请帮我看看这个错误代码是怎么回事 如何通过服务端(带网页界面)修改客户端定义的变量值? 多文件上传问题,请问下为什么当我添加了一段sql语句就无法往下执行了? PHP分页的QueryString问题,每点一次下一页或上一页,get传参变量就会变长一个(图)
echo $key.'='.$val.'<br>';
}
$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>';
}
}
$index = array_search('c',array_keys($arr));
$arr1 = array_slice($arr, $index);foreach($arr1 as $key=>$val){
echo $key.'='.$val.'<br>';
}
而 #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>';
}
foreach($arr as $key=>$val){
if(! ($flag = $key == 'c' ? true : !empty($flag))) continue;
echo $key.'='.$val.'<br>';
}
$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;
}
}
做循环的时候直接从指针开始
从头遍历有时间浪费,而且foreach创建副本申请了一块不必要内存
6楼和9楼的代码很好了,不过用过汇编和C++的表示对核心代码有强迫症...
吃完饭研究下php手册中的数组函数
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创建副本申请了一块不必要内存 是不正确的
感谢xu大指正...刚学习的时候认为foreach是直接循环原数组,后来看到哪的帖子还是博客的,foreach是复制一份再遍历,内容真是忘了,$value创建副本应该不会刷新记忆...我仔细看看
原来是我脑补错了...
<?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会缓存函数运行结果,循环结束立刻释放,而遇到已存在变量就直接引用
你 fn() 返回的数组总得要有人来接吧?
没有给真实的变量,php也要把它放在堆栈中吧