再请教3个php问题(我老是下标溢出)

题目是这样的:
 1.编程从一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词,打印出最长的单词(我下面的代码老是溢出)
<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>
<?php
if(isset($_POST['Submit']))
{
echo "<center>";
  $str=$_POST['str'];
  $str1= explode(" ",$str);//转换成数组
  $num=count($str1);
  for($k=0;$k<$num;$k++)
  {
  $sum[$k]=array($str1[$k]);
  }
   

for($i=0;$i<$num;$i++)
{
for($j=$i+1;$i<$num;$j++)
{

if(count($sum[$i])>count($sum[$j]))//下标越界
{
$temp=$sum[$i];
$sum[$i]=$sum[$i+1];
$sum[$i+1]=$temp;
}
}
}
echo "最长字符串为:".$temp."";
 
}


?>
</body>



再帮帮忙,看看这两道题怎么做,万分感谢!!:
  2。从键盘输入一指定金额(以元为单位,如345.78),然后显示支付该金额的各种面额人民币数量,要求显示100元、50元、10元、5元、2元、1元、5角、1角、5分、1分各多少张。 (输出面额最大值:比如345.78=100*3+10*4+5*1+0.5*1+0.1*2+0.01*8)。

  3。编程实现对键盘输入的英文名句子进行加密。用加密方法为,当内容为英文字母时其在26字母中的其后三个字母代替该字母,若为其它字符时不变。

作者: cpmwp   发布时间: 2011-05-31

if(count($sum[$i])>count($sum[$j]))//下标越界
------------------------------------------------
当$i到达了数组最后一个位置,$j = $i+1,那$sum[$j]不就越界了么

作者: foolbirdflyfirst   发布时间: 2011-05-31

关键是怎么改呢!!初学者

作者: cpmwp   发布时间: 2011-05-31

你可以多多看看手册里的array_前缀的函数,会有很多收获
方法很多的。。
PHP code
$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]);

作者: foolbirdflyfirst   发布时间: 2011-05-31

for($i=0;$i<$num-1;$i++)
{
for($j=$i+1;$j<$num;$j++)
{

作者: xuzuning   发布时间: 2011-05-31