【问题标题】:Access multidimensional stdClass array dynamically- Codeigniter动态访问多维 stdClass 数组 - Codeigniter
【发布时间】:2014-10-15 20:13:11
【问题描述】:

我想知道如何使用嵌套的 foreach 循环访问以下数组?

   Array ( [0] => 
   Array ( [0] => stdClass Object ( [roleID] => 3 [permID] => 2 ) 
           [1] => stdClass Object ( [roleID] => 3 [permID] => 3 ) 
           [2] => stdClass Object ( [roleID] => 2 [permID] => 4 )
           [3] => stdClass Object ( [roleID] => 2 [permID] => 5 ) ) 

这是我的代码:

    foreach($allPermissions as $allPermission) :
  
     foreach($rolePermissions as $rolePermission) :  
                 
         if($allPermission->ID==$rolePermission[0]->permID) {  ?>

          <div class="perms">
            <input type="checkbox" name="permissions[]" id="<?php echo $allPermission->ID; ?>"  value="<?php print $allPermission->ID; ?>"  checked><?php print $allPermission->permName; ?></option></div>
         <?php } 
        endforeach;
     endforeach;  ?>

这样我可以获得与索引 0 相关的结果,但如果数组索引高于 0,则无法获得结果。

回答

我用下面的代码弄清楚:

             foreach($rolePermissions as $key=>$val) :  
                   foreach($val as $subkey=>$subval)
                        {
                        
                  if($allPermission->ID==$subval->permID) {
            ?>
          <div class="perms">
           <input type="checkbox" name="permissions[]" id="<?php echo $allPermission->ID; ?>"  value="<?php print $allPermission->ID; ?>"  checked><?php print $allPermission->permName; ?></option></div>
            <?php }  }

【问题讨论】:

  • 这两个数组是什么 $allPermissions,$rolePermissions.

标签: php arrays codeigniter multidimensional-array foreach


【解决方案1】:

如果我理解正确的话应该是这样的

// Iterating all permissions

foreach($allPermissions as $allPermission){

// Iterating the roles of a specific permission

    foreach($allPremisson as $rolePermission) {

    }
}

【讨论】:

  • 否:弹出以下错误:“尝试获取非对象的属性”
  • 你到底想做什么?我已经删除了 if 条件,我的意思是现在使用 $rolePermission 您可以访问内部数组的 stdClass 对象。如问题中所述,您无法访问第二个元素。
  • 我想访问每个 permID。但我只能访问数组索引 0 的 permID,因为我只提到了 0 索引。所以我想知道如何使它动态,因为我可以遍历所有索引
【解决方案2】:

试试这个:

foreach($allPermissions as $allPermission) :

     foreach($rolePermissions as $key=>$rolePermission) :  

         if($allPermission->ID==$rolePermission[$key]->permID) {  ?>

          <div class="perms">
            <input type="checkbox" name="permissions[]" id="<?php echo $allPermission->ID; ?>"  value="<?php print $allPermission->ID; ?>"  checked><?php print $allPermission->permName; ?></option></div>
         <?php } 
        endforeach;
     endforeach;  ?>

在普通的php中你可以这样做:

<?php 
$array=array ( 0 => 
   array ( 0 => array( roleID => 3, permID => 2 ), 
           1 => array ( roleID => 3 ,permID => 3 ),
           2 => array ( roleID => 2 ,permID => 4 ),
           3 => array ( roleID => 2 ,permID=> 5 ) ) );


    foreach($array as $allPermission) 

     foreach($array as $key=>$rolePermission)  

         if($allPermission->roleID==$rolePermission[$key]->permID) {  ?>

          <div class="perms">
            <input type="checkbox" name="permissions[]" id="<?php echo $allPermission->ID; ?>"  value="<?php print $allPermission->ID; ?>"  checked><?php print $allPermission->permName; ?></option></div>
         <?php } 

 ?>

【讨论】:

    猜你喜欢
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    相关资源
    最近更新 更多