使用PHP foreach循环格式化jQuery函数


Format jQuery function with PHP foreach loop

我为准备jQuery函数写了一段PHP代码,该函数可以从html多选框中选择多个值。

有不同的竞选活动,它有单独的问题集,一个竞选活动有很多问题集。下面的代码将输出返回为

$('#q9 select').val('2'); 
$('#q10 select').val('2'); 
$('#q10 select').val('1');

但我需要此输出作为

$('#q9 select').val(['2']); 
$('#q10 select').val(['2','1']);

要选择多包项目,有人能帮忙吗,谢谢。。。

<script>
$(function(){
 <?php 
 foreach ($selectdefaults as $s):
   ?>   
   $('#q<?php echo $s['campsetjoin']['campid'];?> select').val('<?php echo $s['campsetjoin']['setid'];?>');
   <?php  
 endforeach;
 ?> 
});
</script>

我认为您应该在更改数组的格式之前:

现在你有这样的:

array(
   array('campid'=>9, 'setid' => 2),
   array('campid'=>10, 'setid' => 1),
   array('campid'=>10, 'setid' => 2)
)

相反,你应该准备你的阵列,比如:

array(
   array('campid'=>9, 'setid' => array(2)),
   array('campid'=>10, 'setid' => array(1,2))
)

在这一点上,你可以写:

<script>
$(function(){
 <?php 
foreach ($selectdefaults as $s):
?>   
$('#q<?php echo $s['campsetjoin']['campid'];?> select').val([<?php echo implode("','",$s['campsetjoin']['setid']); ?>]);
<?php  
 endforeach;
 ?> 
});
</script>

我同意以上两个答案,即修改数据结构或使用纯JS解决方案会更干净。然而,如果两者都不是选项,你可以这样做:

<script>
$(function(){
 <?php 
 // make a hash with the campid as the key
 // and the value be an array of all of the setids
 $campids = array();
 foreach ($selectdefaults as $s):
   $quoted_setid = "'"+$s['campsetjoin']['setid']+"'";
   if ($campids[$s['campsetjoin']['campid']) {
     $campids[$s['campsetjoin']['campid']][] = $quoted_sid;
   }else {
     $campids[$s['campsetjoin']['campid']] = array($quoted_sid);
   }
 endforeach;
 foreach ($campids as $c=>$setids):
   ?>   
   $('#q<?php echo $c;?> select').val('[<?php echo implode(",", $setids);?>]');
   <?php  
 endforeach;
 ?> 
});
</script>

(链接到答案底部的代码/演示)

我建议您在原始数据和使用数据之间进行一个准备步骤。排列数据,使每个ID代表一个数据集:

array(2) {
  [9]=>
  array(1) {
    [0]=>
    int(2)
  }
  [10]=>
  array(2) {
    [0]=>
    int(2)
    [1]=>
    int(1)
  }

然后,JSON序列化数据并将其注入脚本,而不是混合PHP和JS(这会导致许多令人困惑的构造、引用等)。

(function (injected) {
    /*
      pure JS here, using `injected` var instead of PHP data
    */
}(
    <?php echo json_encode($data); ?>
))

代码/演示:http://codepad.org/BfzOOlPT