webForumDet fria alternativet

Hämta index från Array/Vektor mha värde

ASP

5 svar · 487 visningar · startad av KrpSvedberg

Medlem sedan okt. 200558 inlägg
Frågan#1

Hej!

Jag har en array som jag fyller med ett recordset.

dim strSQL,rs,thevek,getNextCompId

strSQL = "SELECT tCompetenceTypeId FROM viewCompetence WHERE tUserId = " & theUserId & " ORDER BY sGroupName, sName"
call getRsWithSQL(rs,theDb,strSQL)

thevek = rs.GetRows()
if ubound(thevek,2) >= (currentIndex) then
   getNextCompId = thevek(0,currentIndex)
else
   getNextCompId = 0
end if

Nu är det vidare så att i vissa fall har jag värdet och måste plocka ut vilket index det har i min array/vektor, så att jag vet vilken plats värdet har i array'en.

Nån som förstår vad jag menar och kan hjälpa? =/

Medlem sedan mars 20041 505 inlägg
#2

ASP/VbScript är tyvärr väldigt klent vad gäller array-funktioner.
Men här är en funktion som jag skrivit som söker efter ett värde i en array, och returnerar index om värdet finns, och false om värdet inte finns.
Den fungerar alltså likt funktionen array_search i PHP.

Function ArraySearch(needle, haystack)
	dim i, index
	index = false
	If isArray(haystack) Then
		For i = lBound(haystack) to uBound(haystack)
			If haystack(i) = needle Then
				index = i
				Exit For
			End if
		Next
	End if
	ArraySearch = index
End Function

Använd såhär:

dim test
test = array("Tjabba", "Tjena", "Hallå")
response.write ArraySearch("Tjena", test) 'Detta skriver ut 1
Medlem sedan okt. 200558 inlägg
#3

Hmmm, tack för hjälpen, men den verkar inte vilja jämföra i den innersta If-satsen (if haystack(i) = needle then...) om vektorn har mer än 2 dimensioner. Går inte in i den alls.

 Function ArraySearch(theId, theArr)
	dim i, index
	index = false
	If isArray(theArr) Then
		For i = lBound(theArr,2) to uBound(theArr,2)
			If theArr(0,i) = theId Then
				index = i
				Exit For
			End if
		Next
	End if
	ArraySearch = index
End Function
Medlem sedan okt. 200558 inlägg
#4

Ingen som kan tänkas veta vad det är som krånglar?

Array'en ovan vill alltså inte jämföra theArr(0,i) med theId

Medlem sedan okt. 200558 inlägg
#5

Jag löste det genom att sätta int runt värdena jag jämför.

Tack till Troxy för hjälp på traven!

<%Function ArraySearch(theId, theArr)
	dim i, index, num
	
	index = false
	
	If isArray(theArr) Then
	
		For i = lBound(theArr,2) to uBound(theArr,2)
		    num = theArr(0,i)
		    
			If int(theid) = int(num) Then
				index = i
				Exit For
			End if
			
		Next
		
	End if
	ArraySearch = index
End Function%>
Medlem sedan mars 20041 505 inlägg
#6

Varsågod!
Så bra att du lyckades bygga ut funktionen :)

583 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
444 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
444 ms — ändringar (db)