2017-03-03 46 views
0

我有一个这样的数组:推多了一个元素数组PHP

return array(

    'User Management -> Role Management' => array(
     array(
      'permission' => 'role-management.view', 
      'label'  => 'View', 
     ), 
     array(
      'permission' => 'role-management.create', 
      'label'  => 'Create', 
     ), 
     array(
      'permission' => 'role-management.edit', 
      'label'  => 'Edit', 
     ), 
     array(
      'permission' => 'role-management.delete', 
      'label'  => 'Delete', 
     ), 
    ), 

    'User Management -> User Management' => array(
     array(
      'permission' => 'user-management.view', 
      'label'  => 'View', 
     ), 
     array(
      'permission' => 'user-management.create', 
      'label'  => 'Create', 
     ), 
     array(
      'permission' => 'user-management.edit', 
      'label'  => 'Edit', 
     ), 
     array(
      'permission' => 'user-management.delete', 
      'label'  => 'Delete', 
     ), 
    ), 

); 

我已经成功地访问该数组像这样:

$permissions = Config::get('permissions'); 

我想补充以下label新指标。我已经尝试过,但无法添加。 `的foreach($权限$许可){

 foreach ($permission as $eachPermission) { 

      $encodedPermission = base64_encode($eachPermission['permission']); 

      // $eachPermission['encodedPermission'] = $encodedPermission; 
      array_push($eachPermission, "encodedPermission", $encodedPermission);    
     } 
    } 
    var_dump($permissions); ` 

我尝试了这些,但不能设置新的索引。我的预期结果是这样的:

'permission' => 'role-management.view', 
'label'  => 'View', 
'encodedPermission' => 'someencodedstring' 

我是做错了还是错过了一些东西。

回答

1

您的数组是多层次的,所以您需要进行双向foreach才能达到更改所需的级别。

并且为了将您的更改保存在原始数组中,您需要在迭代器之前使用与号(&)以保持对原始数组的引用。没有它,你只会将新数据插入到为foreach循环创建的数组副本中。

这工作:

foreach ($permissions as &$eachPermission) { 
    foreach ($eachPermission as &$singlePermission) { 
     $encodedPermission = base64_encode($singlePermission['permission']); 
     array_push($singlePermission, "encodedPermission", $encodedPermission); 
    } 
} 
var_dump($permissions); 
1

我会做这样的,只是因为它是更容易理解......

foreach($permissions as $name1=>$ar1){ 
    foreach($ar1 as $name2=>$ar2){ 
     $permissions[$name1][$name2]['encodedPermission'] = base64_encode($ar2['permission']); 
    } 
}