Heim > Backend-Entwicklung > PHP-Tutorial > 求高手一个算法解决办法

求高手一个算法解决办法

WBOY
Freigeben: 2016-06-13 10:14:47
Original
760 Leute haben es durchsucht

求高手一个算法
有两个二维数组

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'));
Nach dem Login kopieren

如何能够得到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>
Nach dem Login kopieren
探讨

从算法时间度上考量
if(!$t[$v['name'].$v['url']]) 是查询数组的键,同样也是查询列表,复杂度为 n

------解决方案--------------------
isset 判断一个值是否在列表中
并无所谓是键还是值,也无所谓你的数据是如何组织的
总之,他是在列表中查询,最坏的情况就是检索到列表的最后一个元素

其实 isset 与 in_array 是相似的

就有人在我的某个类似问题中(使用了 in_array)提出了质疑
很简单,仅就算法而言,并不能因为是php内部实现的,就不计算在内

哈希表的性能优于线性表,但在时间复杂度上还是一样的
当然并不排除我的高中学历影响了对理论知识的理解
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage