免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
如何高效的遍歷數(shù)組?
如何高效的遍歷數(shù)組? [打印本頁(yè)]

作者: courage121    時(shí)間: 2007-5-19 22:22     標(biāo)題: 如何高效的遍歷數(shù)組?

現(xiàn)有一個(gè)數(shù)組$A存有30000多條記錄,數(shù)組$B存有10000多條記錄,如何高效的判斷數(shù)組$B中的每一元素是否在數(shù)組$A中,如果通過(guò)循環(huán)+in_array($B[i],$A)判斷,還要將max_execution_time=240 才能保證頁(yè)面不會(huì)停止運(yùn)行。請(qǐng)問(wèn)高人有沒(méi)有更好的方法進(jìn)行遍歷數(shù)組?
還有,php的in_array是如何遍歷數(shù)組的?是通過(guò)二叉樹還是hash表,還是按照順序一個(gè)一個(gè)的遍歷呀?
作者: 4號(hào)HEROIN    時(shí)間: 2007-5-19 23:13

PHP有array_diff這個(gè)函數(shù),可以實(shí)現(xiàn),搞出兩個(gè)數(shù)組的差集
但是不太清楚效率怎么樣。
ps:感覺(jué)應(yīng)該是通過(guò)HASH吧

[ 本帖最后由 4號(hào)HEROIN 于 2007-5-19 23:18 編輯 ]
作者: courage121    時(shí)間: 2007-5-19 23:18     標(biāo)題: 回復(fù) 2樓 4號(hào)HEROIN 的帖子

如果in_array是通過(guò)hash進(jìn)行遍歷的,還有沒(méi)有更快的辦法實(shí)現(xiàn)判斷$B是否在$A中了?
作者: HonestQiao    時(shí)間: 2007-5-19 23:42

把其中一個(gè)數(shù)組反轉(zhuǎn)key與value互換,然后看看
作者: courage121    時(shí)間: 2007-5-20 00:02     標(biāo)題: 回復(fù) 4樓 HonestQiao 的帖子

版主,能說(shuō)明一下反轉(zhuǎn)key與value目的是什么嗎?
作者: hightman    時(shí)間: 2007-5-20 10:26

很顯然應(yīng)該把數(shù)組B的值轉(zhuǎn)換成鍵.因?yàn)殒I是進(jìn)行HASH組織的,查找很快,而VALUE只是由KEY組織存放,本身沒(méi)有索引,每次查找都是遍歷.

$C = array_flip($B);
foreach ($A as $a) { .... if (isset($C[$a])) ... }
作者: wildlily980    時(shí)間: 2007-5-20 14:18

反轉(zhuǎn)數(shù)組會(huì)不會(huì)很費(fèi)時(shí)間呢?
作者: HonestQiao    時(shí)間: 2007-5-20 14:41



QUOTE:
原帖由 wildlily980 于 2007-5-20 14:18 發(fā)表
反轉(zhuǎn)數(shù)組會(huì)不會(huì)很費(fèi)時(shí)間呢?

反轉(zhuǎn)也就循環(huán)一次。
作者: php店小二    時(shí)間: 2007-5-21 10:20

學(xué)習(xí)了!謝謝
作者: mokai    時(shí)間: 2007-6-8 17:46

array_diff
計(jì)算數(shù)組的差集 (PHP 4 >= 4.0.1, PHP 5)

array array_diff ( array array1, array array2 [, array ...] )

說(shuō)明
array_diff() 返回一個(gè)數(shù)組,該數(shù)組包括了所有在 array1 中但是不在任何其它參數(shù)數(shù)組中的值。注意鍵名保留不變。

例 219. array_diff() 例子
copy to clipboard
<?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);

print_r($result);
?>

在 $array1 中多次出現(xiàn)的值一樣處理,輸出結(jié)果為:

copy to clipboard
Array
(
   [1] => blue
)
注意:
兩個(gè)單元僅在 (string) $elem1 === (string) $elem2 時(shí)被認(rèn)為是相同的。也就是說(shuō),當(dāng)字符串的表達(dá)是一樣的時(shí)候。

注意:
注意本函數(shù)只檢查了多維數(shù)組中的一維。當(dāng)然可以用 array_diff($array1[0], $array2[0]); 檢查更深的維度。

警告:
本函數(shù)在 PHP 4.0.4 中是壞的!

參見(jiàn) array_diff_assoc(),array_intersect() 和 array_intersect_assoc()。
作者: yueliangdao0608    時(shí)間: 2007-6-9 09:45

強(qiáng)烈關(guān)注.
作者: polymorph    時(shí)間: 2007-6-9 17:56

是否可以考慮一下先排序呢
作者: courage121    時(shí)間: 2007-6-9 20:02

剛才將兩個(gè)大小為25000數(shù)組用函數(shù)array_diff()進(jìn)行了測(cè)試一下,用時(shí)也很短,但是根據(jù)我的程序的需求,感覺(jué)還是如下的方法比較適合我

QUOTE:
原帖由 hightman 于 2007-5-20 10:26 發(fā)表
很顯然應(yīng)該把數(shù)組B的值轉(zhuǎn)換成鍵.因?yàn)殒I是進(jìn)行HASH組織的,查找很快,而VALUE只是由KEY組織存放,本身沒(méi)有索引,每次查找都是遍歷.

$C = array_flip($B);
foreach ($A as $a) { .... if (isset ...


作者: eye_onme    時(shí)間: 2007-6-10 12:02



QUOTE:
原帖由 hightman 于 2007-5-20 10:26 發(fā)表
很顯然應(yīng)該把數(shù)組B的值轉(zhuǎn)換成鍵.因?yàn)殒I是進(jìn)行HASH組織的,查找很快,而VALUE只是由KEY組織存放,本身沒(méi)有索引,每次查找都是遍歷.

$C = array_flip($B);
foreach ($A as $a) { .... if (isset ...

這個(gè)方法不錯(cuò)
作者: liuguanyu    時(shí)間: 2007-6-11 16:28

恩,而且還可以把重復(fù)元素剔除
作者: jtql420    時(shí)間: 2007-6-12 15:35

mark mark
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
[PHP] 判斷兩個(gè)數(shù)組是否相同
誠(chéng)之和:php如何去除數(shù)組中為0的元素
PHP array
PHP數(shù)組操作匯總 php數(shù)組的使用技巧
PHP必備的函數(shù)集
很全的php數(shù)組操作方法
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服