求高手一个算法
有两个二维数组
PHP code
$a=array(
array('id'=>'1','name'=>'a','url'=>'c'),
array('id'=>'2','name'=>'aa','url'=>'cc'),
array('id'=>'3','name'=>'aaa','url'=>'ccc')
);
$b=array(
array('name'=>'aa','url'=>'cc'),
array('name'=>'a','url'=>'c')
);
如何能够得到array('id'=>'3','name'=>'aaa','url'=>'ccc')呢?意思就是说,比较两个数组中除了id的项,如果数组a中的值在数组b中不存在,则筛选出来,不希望使用嵌套foreach,每个数组中都有好几万条记录,所以效率是个问题。请教各位,还望有思路的朋友赐教。
------解决方案--------------------
PHP code
$t=array();
foreach($b as $vl)
$t[$vl['name'].$vl['url']]=$vl;
foreach($a as $k=>$v)
if(!$t[$v['name'].$v['url']]) unset($a[$k]);
print_r($a);
------解决方案--------------------
------解决方案--------------------
isset 判断一个值是否在列表中
并无所谓是键还是值,也无所谓你的数据是如何组织的
总之,他是在列表中查询,最坏的情况就是检索到列表的最后一个元素
其实 isset 与 in_array 是相似的
就有人在我的某个类似问题中(使用了 in_array)提出了质疑
很简单,仅就算法而言,并不能因为是php内部实现的,就不计算在内
哈希表的性能优于线性表,但在时间复杂度上还是一样的
当然并不排除我的高中学历影响了对理论知识的理解