array_diff无法使用count codeigniter

时间:2015-03-23 12:27:29

标签: php codeigniter

当我使用我的分页时,我不希望它计算我的数组中的某些文件。我尝试过阵列差异但没有工作。

如何制作,以便不计算我 $not_count array()中的任何内容,因此我的$config['total_rows'] = $counted_files;显示正确的计数。

<?php

class Extension_permissions extends Admin_Controller {

public function __construct() {
    parent::__construct();
    $this->load->model('admin/extension/model_extension_permissions');
    if ($this->model_extension_permissions->check_permission_access() == true) {
        return true;
    } else {
        redirect('admin/permission');
    }
}

public function index($page = 0) {
    $data['title'] = "Permissions";

    $controller_files = $this->model_extension_permissions->get_installed_permissions('name'); 

    $data['controller_files'] = array();

    $files = glob(FCPATH . 'application/modules/admin/controllers/*/*.php') ;

    $per_page = 1;

    $offset = $page * $per_page;

    $paginatedFiles = array();

    $not_count = array(
        FCPATH . 'application/modules/admin/controllers/common/dashboard.php',
        FCPATH . 'application/modules/admin/controllers/common/login.php',
        FCPATH . 'application/modules/admin/controllers/common/logout.php',
        FCPATH . 'application/modules/admin/controllers/common/header.php',
        FCPATH . 'application/modules/admin/controllers/common/footer.php'
    );

    $counted_files = array_diff($not_count, count($files)) ;

    if ($counted_files) {
        $paginatedFiles = array_slice($files, $offset, $per_page);
    }

    if ($paginatedFiles) {

        foreach ($paginatedFiles as $file) {

            $controller =  basename(strtolower($file), '.php');

            $modules = $this->model_extension_permissions->get_permissions_by_controller($controller);

            $module_data = array();

            foreach ($modules as $module) {
                $module_data[] = array(
                    'permission_id' => $module['permission_id'],
                    'name' => ucwords(str_replace('_', ' ', $controller) . ' &gt; ' . $module['name']),
                    'edit' => site_url('admin/extension/permissions/update' .'/'. $controller .'/'. $module['permission_id']),
                    'delete' => site_url('admin/extension/permissions/uninstall' .'/'. $controller .'/'. $module['permission_id'])
                );
            }

            $data['controller_files'][] = array(
                'name' => $controller,
                'controller' => $controller,
                'module'    => $module_data,
                'install' => site_url('admin/extension/permissions/install') .'/'.$controller,
                'installed' => in_array($controller, $controller_files)
            );
        }
    }

    $this->load->library('pagination');

    $config['base_url'] = base_url()."admin/extension/permissions";
    $config['total_rows'] = $counted_files;
    $config['per_page'] = $per_page;
    $config['num_links'] = 200;
    $config['uri_segment'] = 4;
    $config['use_page_numbers'] = TRUE;

    $this->pagination->initialize($config); 

    $this->parser->parse('template/extension/extension_permissions', $data);
}
}

1 个答案:

答案 0 :(得分:2)

array_diff的第一个参数是要比较的数组,第二个参数是要比较的数组。在这种情况下,您要从$not_count中排除$files。你的代码应该是这样的。

public function index($page = 1) {

        $data['title'] = "Permissions";

        $controller_files = $this->model_extension_permissions->get_installed_permissions('name'); 

        $data['controller_files'] = array();

        $files = glob(FCPATH . 'application/modules/admin/controllers/*/*.php') ;

        $per_page = 5;

        $offset = ($page - 1) * $per_page;

        $paginatedFiles = array();

        $not_count = array(
            FCPATH . 'application/modules/admin/controllers/common/dashboard.php',
            FCPATH . 'application/modules/admin/controllers/common/login.php',
            FCPATH . 'application/modules/admin/controllers/common/logout.php',
            FCPATH . 'application/modules/admin/controllers/common/header.php',
            FCPATH . 'application/modules/admin/controllers/common/footer.php'
        );

        $counted_files = array_diff($files, $not_count) ;

        if (count($counted_files)) {
            $paginatedFiles = array_slice($counted_files, $offset, $per_page, true);
        }

        if ($paginatedFiles) {

            foreach ($paginatedFiles as $file) {

                $controller =  basename(strtolower($file), '.php');

                $modules = $this->model_extension_permissions->get_permissions_by_controller($controller);

                $module_data = array();

                foreach ($modules as $module) {
                    $module_data[] = array(
                        'permission_id' => $module['permission_id'],
                        'name' => ucwords(str_replace('_', ' ', $controller) . ' &gt; ' . $module['name']),
                        'edit' => site_url('admin/extension/permissions/update' .'/'. $controller .'/'. $module['permission_id']),
                        'delete' => site_url('admin/extension/permissions/uninstall' .'/'. $controller .'/'. $module['permission_id'])
                    );
                }

                $data['controller_files'][] = array(
                    'name' => $controller,
                    'controller' => $controller,
                    'module'    => $module_data,
                    'install' => site_url('admin/extension/permissions/install') .'/'.$controller,
                    'installed' => in_array($controller, $controller_files)
                );
            }
        }

        $this->load->library('pagination');

        $config['base_url'] = base_url()."admin/extension/permissions";
        $config['total_rows'] = count($counted_files);
        $config['per_page'] = $per_page;
        $config['num_links'] = 5;
        $config['uri_segment'] = 4;
        $config['use_page_numbers'] = TRUE;
        $config['full_tag_open'] = '<ul class="pagination pagination-sm">'; 
        $config['full_tag_close'] = '</ul>'; 
        $config['num_tag_open'] = '<li>'; 
        $config['num_tag_close'] = '</li>'; 
        $config['cur_tag_open'] = '<li class="active"><span>'; 
        $config['cur_tag_close'] = '<span class="sr-only">(current)</span></span></li>'; 
        $config['prev_tag_open'] = '<li>'; 
        $config['prev_tag_close'] = '</li>'; 
        $config['next_tag_open'] = '<li>'; 
        $config['next_tag_close'] = '</li>'; 
        $config['first_link'] = '&laquo;'; 
        $config['prev_link'] = '&lsaquo;'; 
        $config['last_link'] = '&raquo;'; 
        $config['next_link'] = '&rsaquo;'; 
        $config['first_tag_open'] = '<li>'; 
        $config['first_tag_close'] = '</li>'; 
        $config['last_tag_open'] = '<li>'; 
        $config['last_tag_close'] = '</li>';

        $this->pagination->initialize($config); 

        $this->parser->parse('template/extension/extension_permissions', $data);
    }

希望它对你有用。