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

时间:2012-03-12 17:19:37

标签: php jquery arrays

我编写了一个用于准备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>

3 个答案:

答案 0 :(得分:2)

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

现在你有这样的话:

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>

答案 1 :(得分:1)

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

我建议您在原始数据与其使用之间进行准备步骤。排列数据,使每个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

答案 2 :(得分:1)

我同意以上两个答案,无论是修改数据结构还是使用纯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>