PHP 一个数组根据另外一个数组进行过滤,有啥更简练的办法?

Jiazz 发布于 2015/01/05 05:33
阅读 1K+
收藏 2
PHP
<?php

$a = array(
    'hrm' => array('archives', 'statistics', 'structure', 'contract', 'train', 'attendance', 'recruitment'),
    'em' => array('status', 'archives', 'repair')
);






$b = array(
    'hrm' => array(
            'name' => '人事管理'
            'funs' => array(
                    'statistics' => array(
                            'name' => '报表中心',
                            'acts' => array('a' => '查看', 'b' => '编辑', 'c' => '删除', 'e' => '审核')
                        ),

                    'archives' => array(
                            'name' => '人事档案'
                            'acts' => array('a' => '查看', 'b' => '编辑', 'c' => '删除', 'e' => '审核')
                        )
                )
        ),
    'em' => array(
            'name' => '设备管理',
            'funs' => array(
                    'status' => array(
                            'name' => '设备状态',
                            'acts' => array('a' => '查看', 'b' => '编辑', 'c' => '删除', 'e' => '审核')
                        ),

                    'archives' => array(
                            'name' => '设备文档',
                            'acts' => array('a' => '查看', 'b' => '编辑', 'c' => '删除', 'e' => '审核' )
                        ),

                    'repair' => array(
                            'name' => '大修计划',
                            'acts' => array('a' => '查看', 'b' => '编辑', 'c' => '删除', 'e' => '审核')
                        )
                )
        )

	);

要实现的目标就是数组A根据数组B进行筛选。

检查 $a['hrm']['contract'] 是否存在于 $b['hrm']['funs']

我是用了两个循环来实现,由更快捷的方式吗?

<?php
//我的实现方式,想要做到不使用foreach或只使用一次foreach么?
foreach($a as $app => $funs) {
	if(isset($b[$app])) {
		foreach($funs as $fun) {
			if(array_key_exists($fun, $b[$app]['funs'])) {
				$newArray[$app][] = $fun;
			}
		}
	}
}



加载中
0
聽雨人
聽雨人

你要遍历app,然后遍历funs,两层很自然啊,你想换成array_map?
如果你是怕嵌套太多,那个if (isset($b[$app])){ //... } 可以提出来,if (!(isset($b[$app])) continue;
可以去掉一层嵌套。

Jiazz
Jiazz
array_map会把代码变的奇丑无比...效率未必高吧?没测过... if的效率好像没foreach高? 如果没办法那就没有优化的空间了......
0
j
jp029
array_intersect_key
Jiazz
Jiazz
计算数组的交集...做不了这个事情吧~~
返回顶部
顶部