问题描述:
public.php如下:
<?php
function is_public_day($tmp_date,$tmp_process) {
$tmp_date = date("Y-m-d H:i:s" , strtotime($tmp_date) + 86400);
$public = array(
'2009-01-01',
'2009-01-02',
'2009-01-03',
'2009-01-25',
'2009-01-26',
'2009-01-27',
'2009-01-28',
'2009-01-29',
'2009-01-30',
'2009-01-31',
'2009-04-04',
'2009-04-05',
'2009-04-06',
'2009-05-01',
'2009-05-02',
'2009-05-03',
'2009-05-28',
'2009-05-29',
'2009-05-30',
'2009-10-01',
'2009-10-02',
'2009-10-03',
'2009-10-04',
'2009-10-05',
'2009-10-06',
'2009-10-07',
'2009-10-08',
);
$notpublic = array(
'2009-01-04',
'2009-01-24',
'2009-02-01',
'2009-05-31',
'2009-10-10',
'2009-10-11',
);
if ( !in_array( substr( $tmp_date, 0, 10 ), $notpublic ) && ( in_array( substr( $tmp_date, 0, 10 ), $public ) || date( 'w', strtotime($tmp_date) ) == 0 || date( 'w', strtotime($tmp_date) ) == 6 ) ) {
if ( $tmp_process > 0 ) {
is_public_day( $tmp_date , $tmp_process );
}
} else {
if ( $tmp_process > 1 ) {
$tmp_process = $tmp_process - 1;
is_public_day( $tmp_date, $tmp_process );
} else {
echo $tmp_date;
//return $tmp_date; 为什么不能用return???
}
}
}
is_public_day('2009-07-16',3);
?>
意思是求 2009-07-16之后3个工作日是哪天?
为什么不能用
return $tmp_date;
只能用
echo $tmp_date;
用了echo之后会造成很多的麻烦, 也就是说只要一引用is_public_day()函数, 就会直接输出,
不能再赋值, 不能运算。(可能因为echo就是输出吧)
我最想问下各位高手们 该怎样解决这个弊端, 因为我需要运算函数得到的值和比较函数值, 而不是直接输出。
(运算和比较不在is_public_day函数内进行)
大哥第二次的说的不对, 这样是返回不了任何值的。
你可以把这个存成php文件试一下。
但是大哥第一次说的却是有道理,后来我又翻查了php圣经, 按你第一次的思路修改成可以用的啦,
谢谢你的提点。
正确的是下面这样:
if ( !in_array( substr( $tmp_date, 0, 10 ), $notpublic ) && ( in_array( substr( $tmp_date, 0, 10 ), $public ) || date( 'w', strtotime($tmp_date) ) == 0 || date( 'w', strtotime($tmp_date) ) == 6 ) ) {
if ( $tmp_process > 0 ) {
is_public_day( &$tmp_date , &$tmp_process );
}
} else {
if ( $tmp_process > 1 ) {
$tmp_process = $tmp_process - 1;
is_public_day( &$tmp_date, &$tmp_process );
}
}
}
$tmp_date = '2009-07-16';
$tmp_process = 3;
is_public_day(&$tmp_date, &$tmp_process);
echo 'Good = '.$tmp_date;
?>
问题解答:
使用递归时传递数据要传址而不是传值
&$tmp_date
另外is_public_day('2009-07-16',3); 没有具体复制给哪个变量return当然没用
刚才没仔细看,你return语句位置放错了
} else {
echo $tmp_date;
//return $tmp_date; 为什么不能用return???
}
}
}
is_public_day('2009-07-16',3);
这部分改成
} else {
//echo $tmp_date;
$aaa = $tmp_date;
//return $tmp_date; 为什么不能用return???
}
}
return $aaa;
}
$ddd = is_public_day('2009-07-16',3);
echo $ddd;