【问题标题】:Select selected not working in_array php选择不工作 in_array php
【发布时间】:2017-11-27 06:16:36
【问题描述】:

有什么办法可以在in_array的下拉框中设置选中项。 但 Selected="selected" 对我不起作用。只有少数 Selected 值显示下拉列表并且未选中

我尝试了以下代码

<label for="assignedto">Assigned to</label>
@foreach($menu as $menus)
   <?php
     $assignedid=$menus->assigned_to;
     $assid[]=explode(',',$assignedid);

   ?>
@endforeach
<?php $maxcount= count($assid); echo '<pre>';print_r($assid); ?>
      <select id="framework1" name="Roles[]" multiple class="form-control" >
        <?php $a= 0;?>          
          @foreach($roles as $id=>$name)
       <?php $newcount=count($assid[$a]);?>
       <option value="{{$id}}"@if(in_array($id, $assid[$a]))selected="selected"@endif>{{$name}}</option>
<?php  
$a++; 
if($a==$maxcount) break; 
?>
@endforeach

这里:

$assid=Array
(
    [0] => Array
        (
            [0] => 6
            [1] => 2
            [2] => 3
        )

    [1] => Array
        (
            [0] => 4
            [1] => 5
            [2] => 6
        )

    [2] => Array
        (
            [0] => 6
        )

    [3] => Array
        (
            [0] => 2
            [1] => 3
        )

)

而角色数组为:

$roles=Illuminate\Support\Collection Object
(
    [items:protected] => Array
        (
            [1] => admin
            [12] => asdasd
            [13] => asdfgf
            [4] => manager
            [7] => NewRole
            [8] => NewRole12
            [9] => NewRole13
            [10] => NewRole14
            [11] => NewRole15
            [5] => supervisor
            [6] => Tester
            [2] => user
            [3] => User2
        )

)

对于第一次迭代,我想选择 ids 4、5、6 意味着应该选择经理、主管、测试人员,同样选择第二次迭代 4、5、6 等 但是选择多项选择对我不起作用。请帮助我。任何帮助将不胜感激

【问题讨论】:

    标签: php multi-select


    【解决方案1】:

    使用可以使用三元运算符代替“if”-

    <option value="{{$id}}" <?php echo ((in_array($id, $assid[$a])) ? 'selected="selected"':'')?> >{{$name}}</option>
    

    【讨论】:

      【解决方案2】:

      我希望你需要重写下面的链接:

      <select id="framework1" name="Roles[]" multiple class="form-control" >              
         @foreach($roles as $id=>$name)   
              <option value="{{$id}}" 
               @if(in_array($id, $assid[$a])) 
                  selected="selected"
               @endif
               >{{$name}}</option>
         @endforeach
      </select>
      

      【讨论】:

      • 感谢您的回复,但它与以前的工作方式不同
      • 已更新评论,请根据更改重试。
      【解决方案3】:

      重写你的代码如下:-

      <label for="assignedto">Assigned to</label>
      <?php $assid = []; // declare array ?>
      @foreach($menu as $menus)
      <?php
          if(!empty($menus->assigned_to)){ // check if assigned_to key exist in array
              $assignedid=$menus->assigned_to;        
              $assid[]=explode(',',$assignedid);  
          }
      ?>
      @endforeach          
      
      <?php   
        if(!empty($assid)){  
              $assid = call_user_func_array('array_merge', $assid); // It will shift all array elements up one level
        }
        $assid = empty($assid) ? [] : array_combine($assid, $assid); // rewrite this line
      
      ?>    
      
      <select id="framework1" name="Roles[]" multiple class="form-control" >              
         @foreach($roles as $id=>$name)   
              <option value="{{$id}}"@if(in_array($id, $assid))selected="selected"@endif>{{$name}}</option>
         @endforeach
      </select>
      

      【讨论】:

      • 感谢您的回复,但总是选择 5 个值。对于第一次迭代,我想选择 [0] => Array ([0] => 6 [1] => 2 [2] = > 3 ) 仅 6,2,3
      • 请检查更新的答案,如果问题仍然存在,请告诉我。
      • 重写这一行:- $assid = empty($assid) ? [] : array_combine($assid, $assid);
      • -答案与以前相同意味着现在总是选择 5 项。我有 4 次迭代,所以第一次迭代只有 id 4、5、6 应该选择。但现在 4 次迭代得到相同的结果意味着 5 项得到选择..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多