求高手一个算法 有两个二维数组
PHP code
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->
$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);
<br><font color="#e78608">------解决方案--------------------</font><br>
探讨
从算法时间度上考量 if(!$t[$v['name'].$v['url']]) 是查询数组的键,同样也是查询列表,复杂度为 n
------解决方案-------------------- isset 判断一个值是否在列表中 并无所谓是键还是值,也无所谓你的数据是如何组织的 总之,他是在列表中查询,最坏的情况就是检索到列表的最后一个元素 其实 isset 与 in_array 是相似的 就有人在我的某个类似问题中(使用了 in_array)提出了质疑 很简单,仅就算法而言,并不能因为是php内部实现的,就不计算在内 哈希表的性能优于线性表,但在时间复杂度上还是一样的 当然并不排除我的高中学历影响了对理论知识的理解
Déclaration: Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn