1 起因
最近在項(xiàng)目中經(jīng)常會使用foreach來遍歷數(shù)組霜医,有的時(shí)候一層循環(huán)往往不能解決問題蚤吹,需要使用兩層或者多層循環(huán)來遍歷數(shù)據(jù)锡垄,尤其是兩層循環(huán)中的數(shù)據(jù)具有某種關(guān)聯(lián)性的時(shí)候,之前項(xiàng)目組的人包括我一直都是使用雙層循環(huán)來解決這種有關(guān)聯(lián)數(shù)據(jù)的遍歷;但是踱启,有的時(shí)候感覺總是雙層循環(huán)很丑,能否拆分成兩個(gè)循環(huán)來,而且單層循環(huán)的性能要比雙層好疮丛。
2 例子+解決
例如一個(gè)集合A (idA,gno,dataindex...),集合B(gno,idB,data...)辆它,因?yàn)槟承┰蛐枰页黾螦和集合B中g(shù)no相等的數(shù)據(jù)誊薄,并且返回一個(gè)list,這時(shí)候我想大多數(shù)人的想法是使用雙層循環(huán)來遍歷锰茉,例如這樣:
foreach($listA as $v){
foreach($listB as $val) {
if($v->gno == $val->gno)
{//to do }
}
}
其實(shí)可以這樣寫呢蔫,
foreach($listA as $v){
$list[$v->gno] = $v
}
我們用一個(gè)新的list來保存listA中的數(shù)據(jù),并使用關(guān)聯(lián)的屬性作為鍵值飒筑,這樣再來遍歷listB片吊,如下:
foreach($listB as $key=>$val){
$list[$key]->propertyNeed = $list[$val->gno]->propertyNeed
}
這樣的方式就解開雙層循環(huán),性能有所提升协屡。
3 總結(jié)
以上的想法是我在項(xiàng)目中遇到的一個(gè)小小提升俏脊,但是我認(rèn)為每一個(gè)小的提升必將導(dǎo)致大的改變。當(dāng)然這個(gè)方式并不適合所有的情況肤晓。如果有遇到這種情況的少俠联予,希望能夠給與給好的建議,也是做個(gè)記錄材原。
--every step will make a difference.