再请教3个php问题(我老是下标溢出) 本帖最后由 cpmwp 于 2011-05-31 18:32:33 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 if(count($sum[$i])>count($sum[$j]))//下标越界------------------------------------------------当$i到达了数组最后一个位置,$j = $i+1,那$sum[$j]不就越界了么 你可以多多看看手册里的array_前缀的函数,会有很多收获方法很多的。。$array = 'csdn is a good place';$words = explode(' ',$array);function longestWord( $a,$b){ $al = strlen( $a ); $bl = strlen( $b ); return $al > $bl ? -1 : ($al == $bl ? 0 : 1);}usort($words,'longestWord');print_r( $words[0]); for($i=0;$i<$num-1;$i++){for($j=$i+1;$j<$num;$j++){ <body><form id="form1" name="form1" method="post" action=""> <table width="509" height="51" border="1" align="center"> <tr> <td height="45">请输入字符串</td> <td><input name="str" type="text" id="str" /></td> <td><input type="submit" name="Submit" value="提交" /></td> </tr> </table> <div align="center"><span class="STYLE1">注:输入字符串以空格分开 </span> </div></form><?phpif(isset($_POST['Submit'])){ echo "<center>"; $str=$_POST['str']; $str1= explode(" ",$str);//转换成数组 $num=count($str1); for($i=0;$i+1<$num;$i++){if(strlen($str1[$i])>strlen($str1[$i+1])){$str1[$i+1]=$str1[$i];}}echo $str1[$num-1];}?></body>第一题稍微改了下,for($j=$i+1;$i<$num;$j++)你这个循环都是死的 第二题有点意思。$money = '345.78';$rmb['yuan'] = array(100,50,20,10,5,2,1);$rmb['jiao'] = array(5,1);$rmb['fen'] = array(5,1);$my = explode('.',$money);$yy = $my[0];$jf = $my[1];function computeMoney( $money , $type){ $yy = $money; foreach( $GLOBALS['rmb'][$type] as $v) { if( $yy >= $v) { $t[$v.$type] = floor($yy / $v); $yy = $yy - $v * $t[$v.$type]; } } return $t;}echo "<pre/>";print_r(computeMoney($yy, 'yuan'));print_r(computeMoney($jf{0}, 'jiao'));print_r(computeMoney($jf{1}, 'fen'));第三题没看明白。 我也发现了,你的结果不包括20元的,话说rmb是有20元的。你把$rmb['yuan'] = array(100,50,20,10,5,2,1);数组里的20去掉,结果就和你提供的一致了。 如果你可以放弃你的思路,那么$ar = split(" +", 'csdn is a good place');rsort($ar);echo '最长的单词:'.$ar[0]; 本帖最后由 xuzuning 于 2011-05-31 20:53:52 编辑 第3题如果输入的是 xyz 你打算如何处理? 能否实现下列输出格式,345.78=100*3+10*4+5*1+0.5*1+0.1*2+0.01*8我写的:echo $n1."=100*".$r[100]."+50*".$r[50]."+10*".$r[10]."+5*".$r[5]."+2*".$r[2]."+1*".$r[1]."+0.5*".$r[0.5]."+0.1".$r[0.1]."+0.05*".$r[0.05]."+0.01*".$r[0.01]."<br>";这里它提示下标溢出,就是$r[]里面的值不能小于1,这可怎么办呢? 当然可以$n = 345.78;$d = split(',', '100,50,10,5,2,1,0.5,0.1,0.05,0.01');$n *= 100;foreach($d as $k) { $c = $r[$k] = floor($n/$k/100); $n -= $k*100*$c;}$ch = '';foreach($r as $k=>$v) { if($v) { echo "$ch$k*$v"; $ch = '+'; }}100*3+10*4+5*1+0.5*1+0.1*2+0.05*1+0.01*3 php 文件下载问题 php生成excel,提示“无法下载”? php 生成HTML的问题 求助,服务器刷新数据问题 请教各位在PHP中连接oracle的问题 这样的值怎么提取 sqlite如果现实autoincrement 怎样获取另外一个文件中的变量,不用require或include 谁可以说明一下cookie 和 session 的用法。 php curl 模拟登陆 截取网站标题 转码 求助实现某个功能,很急 请帮忙,谢谢!
------------------------------------------------
当$i到达了数组最后一个位置,$j = $i+1,那$sum[$j]不就越界了么
方法很多的。。
$array = 'csdn is a good place';
$words = explode(' ',$array);
function longestWord( $a,$b)
{
$al = strlen( $a );
$bl = strlen( $b );
return $al > $bl ? -1 : ($al == $bl ? 0 : 1);
}
usort($words,'longestWord');
print_r( $words[0]);
{
for($j=$i+1;$j<$num;$j++)
{
<form id="form1" name="form1" method="post" action="">
<table width="509" height="51" border="1" align="center">
<tr>
<td height="45">请输入字符串</td>
<td><input name="str" type="text" id="str" /></td>
<td><input type="submit" name="Submit" value="提交" /></td>
</tr>
</table>
<div align="center"><span class="STYLE1">注:输入字符串以空格分开 </span>
</div>
</form>
<?php
if(isset($_POST['Submit']))
{
echo "<center>";
$str=$_POST['str'];
$str1= explode(" ",$str);//转换成数组
$num=count($str1); for($i=0;$i+1<$num;$i++){
if(strlen($str1[$i])>strlen($str1[$i+1]))
{
$str1[$i+1]=$str1[$i];
}
}
echo $str1[$num-1];
}?>
</body>第一题稍微改了下,for($j=$i+1;$i<$num;$j++)你这个循环都是死的
$money = '345.78';
$rmb['yuan'] = array(100,50,20,10,5,2,1);
$rmb['jiao'] = array(5,1);
$rmb['fen'] = array(5,1);$my = explode('.',$money);
$yy = $my[0];
$jf = $my[1];
function computeMoney( $money , $type)
{
$yy = $money;
foreach( $GLOBALS['rmb'][$type] as $v)
{
if( $yy >= $v)
{
$t[$v.$type] = floor($yy / $v);
$yy = $yy - $v * $t[$v.$type];
}
}
return $t;
}
echo "<pre/>";
print_r(computeMoney($yy, 'yuan'));
print_r(computeMoney($jf{0}, 'jiao'));
print_r(computeMoney($jf{1}, 'fen'));
第三题没看明白。
你把$rmb['yuan'] = array(100,50,20,10,5,2,1);数组里的20去掉,结果就和你提供的一致了。
$ar = split(" +", 'csdn is a good place');
rsort($ar);
echo '最长的单词:'.$ar[0];
如果输入的是 xyz 你打算如何处理?
我写的:echo $n1."=100*".$r[100]."+50*".$r[50]."+10*".$r[10]."+5*".$r[5]."+2*".$r[2]."+1*".$r[1]."+0.5*".$r[0.5]."+0.1".$r[0.1]."+0.05*".$r[0.05]."+0.01*".$r[0.01]."<br>";
这里它提示下标溢出,就是$r[]里面的值不能小于1,这可怎么办呢?
$n = 345.78;$d = split(',', '100,50,10,5,2,1,0.5,0.1,0.05,0.01');$n *= 100;
foreach($d as $k) {
$c = $r[$k] = floor($n/$k/100);
$n -= $k*100*$c;
}$ch = '';
foreach($r as $k=>$v) {
if($v) {
echo "$ch$k*$v";
$ch = '+';
}
}100*3+10*4+5*1+0.5*1+0.1*2+0.05*1+0.01*3