在php中,对数组进行遍历的话,for循环只对数字索引有限;
for和foreach遍历结束后不需要对数据进行reset()操作即可供下次遍历,而each方法则需要。
大家可以通过如下的例子,仔细体会这三者在遍历php一维数组时的用法。
代码如下:
//a
$arr=array('a'=>'abc','b'=>123,'c'=>true);
//b
//$arr=range('a','d');
//1
for($i=0;$i<sizeof($arr);$i++)
echo $arr[$i].', ';
echo '<br />';
//2
foreach($arr as $key)
echo "$key, ";
echo '<br />';
//3
foreach($arr as $key=>$val)
echo "$key-$val, ";
echo '<br />';
//4
reset($arr);
while($item=each($arr)){
echo $item['key'].'-'.$item['value'].', ';
}
echo '<br />';
//5
reset($arr);
while(list($key,$val)=each($arr)){
echo "$key-$val, ";
}
echo '<br />';
?>
代码说明:
, , ,
abc, 123, 1,
a-abc, b-123, c-1,
a-abc, b-123, c-1,
a-abc, b-123, c-1, 使用语句b $arr=range('a','d'); 对$arr进行初始化得到关联数组,输出:
a, b, c, d,
a, b, c, d,
0-a, 1-b, 2-c, 3-d,
0-a, 1-b, 2-c, 3-d,
0-a, 1-b, 2-c, 3-d,
for循环只对数字索引有限;for和foreach遍历结束后不需要对数据进行reset()操作即可供下次遍历,而each方法则需要。
以上就是今天php教程的全部内容了,希望有助于大家掌握php数组遍历的方法,,祝大家学习进步。
1,计算两个日期间隔的年、月、周、日数,代码如下:
<?php
/**
* 计算两个日期间隔的年、月、周、日数
* edit www.
*/
function format($a,$b){
//检查两个日期大小,默认前小后大,如果前大后小则交换位置以保证前小后大
if(strtotime($a)>strtotime($b)) list($a,$b)=array($b,$a);
$start = strtotime($a);
$stop = strtotime($b);
$extend = ($stop-$start)/86400;
$result['extends'] = $extend;
if($extend<7){ //如果小于7天直接返回天数
$result['daily'] = $extend;
}elseif($extend<=31){ //小于28天则返回周数,由于闰年2月满足了
if($stop==strtotime($a.'+1 month')){
$result['monthly'] = 1;
}else{
$w = floor($extend/7);
$d = ($stop-strtotime($a.'+'.$w.' week'))/86400;
$result['weekly'] = $w;
$result['daily'] = $d;
}
}else{
$y= floor($extend/365);
if($y>=1){ //如果超过一年
$start = strtotime($a.'+'.$y.'year');
$a = date('Y-m-d',$start);
//判断是否真的已经有了一年了,如果没有的话就开减
if($start>$stop){
$a = date('Y-m-d',strtotime($a.'-1 month'));
$m =11;
$y--;
}
$extend = ($stop-strtotime($a))/86400;
}
if(isset()($m)){
$w = floor($extend/7);
$d = $extend-$w*7;
}else{
$m = isset($m)?$m:round($extend/30);
$stop>=strtotime($a.'+'.$m.'month')?$m:$m--;
if($stop>=strtotime($a.'+'.$m.'month')){
$d=$w=($stop-strtotime($a.'+'.$m.'month'))/86400;
$w = floor($w/7);
$d = $d-$w*7;
}
}
$result['yearly'] = $y;
$result['monthly'] = $m;
$result['weekly'] = $w;
$result['daily'] = isset($d)?$d:null;
}
return array_filter($result);
}
print_r(format('2012-10-1','2012-12-15'));
?>
输出结果:
Array([extends]=>75[monthly]=>2[weekly]=>2)
2,php 查询某天所在的周数及对应周的起始日期
/**
* @file
* @version 1.1
*/
//获取某个日期的 周数、周对应的开始结束时间
private function getWeekStartEndDay($day)
{
$g = strftime("%u",strtotime($day));
return array('week_num'=>strftime("%V",strtotime($day)),'week_start_day'=>strftime('%Y-%m-%d',strtotime($day)-($g-1)*86400),'week_start_day_cn'=>strftime('%Y年%m月%d日',strtotime($day)-($g-1)*86400),'week_end_day'=>strftime('%Y-%m-%d',strtotime($day) + (7-$g)*86400),'week_end_day_cn'=>strftime('%Y年%m月%d日',strtotime($day) + (7-$g)*86400));
}
?>
php遍历关联数组的三种方法。
方法1:foreach
$sports = array(
'football' => 'good',
'swimming' => 'very well',
'running' => 'not good');
foreach ($sports as $key => $value) {
echo $key.": ".$value."<br />";
?>
输出结果:
swimming: very well
running: not good
方法2:each
$sports = array(
'football' => 'good',
'swimming' => 'very well',
'running' => 'not good');
while ($elem = each($sports)) {
echo $elem['key'].": ".$elem['value']."<br />";
?>
方法3:list & each
$sports = array(
'football' => 'good',
'swimming' => 'very well',
'running' => 'not good');
while (list($key, $value) = each($sports)) {
echo $key.": ".$value."<br />";
?>
介绍完了三种遍历php数组的方法,哪个方法更好呢?
这个大家可以找个复杂的数据,进行下效率测试,就明白了。