PHP - 如何阻止函数打印额外的||在末尾?

时间:2012-04-01 00:16:57

标签: php javascript

在PHP中我有一个函数,问题是它会输出一个额外的||最后,我不想要。

<script type="text/javascript">
function hide_card_code() {
  var payment_source=document.getElementById('payment_source');
  if(
    <?
    forEach($result_cards as $key => $value) {
      echo "payment_source.value=='$value' || \n";
    }
    ?>
    ) {
    //do stuff...
    return true;
  }
}
</script>

它将输出以下HTML。注意额外的||最后。

<script type="text/javascript">
function hide_card_code() {
  var payment_source=document.getElementById('payment_source');
  if(
    payment_source.value=='23' || 
    payment_source.value=='24' || 
    payment_source.value=='25' || 
    ) {
    //do stuff...
    return true;
  }
}
</script>

如何停止额外的|| ?

5 个答案:

答案 0 :(得分:7)

无需循环!只需使用json_encode从值中创建JavaScript数组:

<script type="text/javascript">
function hide_card_code() {
    var payment_source = document.getElementById('payment_source');

    if(<?= json_encode(array_values($result_cards)) ?>.indexOf(payment_source.value) > -1) {
        // do stuff...
        return true;
    }
}
</script>

答案 1 :(得分:1)

 $i=0;
 forEach($result_cards as $key => $value) {
   if($i == 0){
     echo "payment_source.value=='$value' \n";
     $i++;
   }
   else
     echo " || payment_source.value=='$value' \n";
}

答案 2 :(得分:1)

如果有一个简单的方法,为什么要让事情变得复杂? json_encode很慢,循环很愚蠢:为什么不像这样串起数组:

echo 'payment_source.value=="'.implode('" || payment_source.value=="',array_values($array)).'"';
回声:payment_source.value=="[val1]" || payment_source.value=="[val2]" || payment_source.value=="[val3]"

无论数组的数量大小。请记住关闭.'"'位......

答案 3 :(得分:0)

在回显之前将所有内容累积到一个字符串中,然后使用rtrim(),然后回显它。

答案 4 :(得分:0)

<script type="text/javascript">
function hide_card_code() {
  var payment_source=document.getElementById('payment_source');
  if(<?
      echo 'payment_source.value==' , 
      implode(' || payment_source.value==', $result_cards);
  ?>) {
    //do stuff...
    return true;
  }
}