【问题标题】:What is wrong with my syntax here?我的语法有什么问题?
【发布时间】:2009-08-14 11:36:51
【问题描述】:

目标是统计一组用户文本中的段落数...

(对于这个练习,我假设它总是大于 5 段)

那我想把段落数减1/2,四舍五入,中间输入一些内容(echo "yehhoo")。

我确实了解我获得$newvalue 的方式不是很好,还希望得到帮助...

<?php

$choppedup = explode("<p>",$node->field_long_body[0]['safe']);
$choppedpos = count($choppedup);
$choppedpos2 = $choppedpos/2;
$newvalue = floor($choppedpos2);

//I know this is working to here... the rest not so sure.

for($j = 0; $j < $choppedup; $j ++):
  print $choppedup[$j];
  if ($j == $newvalue):
    echo "yehhoo" ;       
  endif;
endif;
?>

谢谢

【问题讨论】:

    标签: php syntax syntax-error


    【解决方案1】:
    for 
    ...
    endfor;       # not endif
    

    您的$newvalue 计算并不可怕,对于数组迭代,我宁愿建议foreach 循环(使用花括号):

    foreach($choppedup as $ind => $p) {
        echo $p;
        if ($ind == $newvalue) {
            echo 'yehoo';
        }
    }
    

    【讨论】:

    • 效果很好。谢谢你,我会探索“as”……那肯定是一个新的……
    • 我是新手。我没有投反对票.. :) 会接受。非常感谢。
    • 我知道你没有,你不能 :) 但我真的很好奇我应该纠正什么来改进我的答案。
    【解决方案2】:

    “Yehhoo”表示大括号!

    for($j == 0; $j < $choppedup; $j ++) {
         print $choppedup[$j];
         if ($j == $newvalue) {
              echo "yehhoo";
         }
    }
    

    【讨论】:

    • 为什么有些例子使用“:”...有什么区别? (ps谢谢)
    • @fighella:阅读您实际使用的内容:docs.php.net/manual/en/…
    【解决方案3】:

    为什么要做这么复杂的循环来统计段落标签的数量?

    你可以这样做:

     $sInput = '<p>Hello World</p><p>What is going on</p><p>Blah</p>';
     if(preg_match_all('/<p>/', $sInput, $arMatches)!==false)
      print count($arMatches[0]) . ' paragraphs<br/>';
    

    当然上面需要一些工作来确保段落标签之间有文本,但这应该可以满足你的需要。

    【讨论】:

    • 循环并不复杂,但你的代码确实不是菜鸟可读的。
    • 嗯,这对他的目的来说很复杂。只需使用正则表达式,您就可以轻松实现他正在做的事情。如果您的需求发生变化,它更易于维护并且不需要太多更改。这不是你所说的“对菜鸟友好”。这里的区别在于代码对于他的目的来说太复杂了。不要试图重新发明轮子并使用你所拥有的。
    猜你喜欢
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多