2012-04-01 41 views
1

在PHP中我有一个函数,问题是它会输出一个额外的||。最后我不想要。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> 

如何停止额外|| ?

+0

好主... – 2012-04-01 03:36:45

回答

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> 
+2

一个非常新颖的解决方案!我向你倾诉你。 – Bojangles 2012-04-01 00:22:20

0

厚积薄发一切成字符串呼应前,然后使用RTRIM(),然后回声它。

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"; 
} 
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; 
    } 
} 

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]"

不论阵列的数量规模。请记住关闭.'"'位...

+0

我打算发布这个(或其变体),但我认为'json_encode'会更简单。如果这是一个性能瓶颈,那么肯定会出现一些错误:) – Ryan 2012-04-01 00:31:50

+0

真的,性能差异。将小于电子的重量。尽管如此,您的解决方案隐含地在每次调用“hide_card_code”函数时调用Array的构造函数,而不是先将它存储在变量中。这只是我从来不想做的事情之一,但当涉及到这样的事情时,我被指责为强迫症。 :-) – 2012-04-01 00:46:45