EDITПопытка преобразовать код PHP массив в VB.NET
Итак, после работы через это на некоторое время, я придумал решение, которое работает, и чище, чем я первоначально придумал для этого. Спасибо за помощь, ребята! Вот код.
Function Program_Search() As String()
'An ArrayList of Objects containing strings for each row.
'So the result is ArrayList(objRow1(strID, strPrograms), objRow2(strID, strPrograms).. etc)
Dim program_results As ArrayList = Get_Results("SELECT ID, Programs FROM tbMetrics ORDER BY ID ASC", strConnectionString)
'Initialize the list of programs. This will contian the tbMetrics Programs that match the selected Program name.
Dim programs As ArrayList = New ArrayList
'Loop through each row selected
For Each row As Object In program_results
'Not currently used.
Dim strID As String = row(0).ToString
'An integer representation of a binary number. Each digit represents a different program being checked.
Dim intPrograms As Integer = CInt(row(1).ToString)
'Convert number to binary string (reversed)
Dim strReversed As String = StrReverse(Convert.ToString(intPrograms, 2))
'Loop through each of the programs in the drop down box which should contain all of the possible choices in order.
For index As Integer = 0 To ddlPrograms.Items.Count - 1
'A bit of an ugly if state that checks for a 1 in the binary position for the selected program.
'Then if it's selected, it checks that the program matches the one selected by the user.
'Finally, it makes sure it doesn't add the same number to the array.
If (strReversed.Length - 1) >= index _
And strReversed(index) = "1" _
And ddlPrograms.SelectedValue.ToString = ddlPrograms.Items(index).Value.ToString _
And programs.Contains(intPrograms) = False Then
'If it passes all of the above checks, then finally add the program integer to the arraylist.
programs.Add(intPrograms)
End If
Next index
Next row
'Return the list of programs as an array, to be used with SQL IN().
Return programs.ToArray
End Function
END EDIT
ОРИГИНАЛ НИЖЕ
Хорошо, так что я PHP программист, пытаясь узнать некоторые VB.NET. Массивы сильно путают меня в VB.NET, поэтому я написал код примера в PHP так, как я знаю, как это сделать. Я был бы очень признателен, если бы кто-нибудь мог показать мне, как это работает в VB.NET.
<?php
function get_result() {
$result = query("SELECT id, value FROM test_table");
/*Returned as:
array(
array("id1", "value1"),
array("id2", "value2")...etc.
)*/
$haystack_top = array();
foreach ($result as $row) {
$id = $row[0]; //Not used currently
$value = $row[1];
for($i=0; $i <= $value; $i++) {
if (check_value($i)) {
$haystack_value = get_new_value($i);
$haystack_top[$value][] = $haystack_value;
}
}
}
$needle = get_needle();
$result = array();
foreach ($haystack_top as $value=>$haystack) {
if (in_array($needle, $haystack)) {
$result[] = $value;
}
}
return array_unique($result);
}
?>
Вот старше, незаконченная копия того, что я работаю на в VB.NET Это не в форме, я на самом деле нужно, потому что я изменил, как логика должна работать при построении пример PHP, но он показывает путаница, с которой я столкнулся с массивами в VB.NET.
Function Program_Search() As String()
Dim program_results As Object = Get_Results("SELECT ID, Programs FROM tbMetrics ORDER BY ID ASC", strConnectionString)
'Create an array of strings to fill with potential field results.
Dim fields As List(Of String) = New List(Of String)()
For Each row As Object In program_results
Dim strID As String = row(0).ToString
Dim strPrograms As String = row(1).ToString
Dim intPrograms As Integer = CInt(strPrograms)
'Convert number to binary string (reversed)
Dim strReversed As String = StrReverse(Convert.ToString(intPrograms, 2))
For index As Integer = 0 To ddlPrograms.Items.Count - 1
If (strReversed.Length - 1) >= index Then
If strReversed(index) = "1" Then
fields.Add(ddlPrograms.Items(index).Value.ToString)
End If
End If
Next index
Next row
Dim programs As String() = fields.ToArray
Dim results As String()
If programs.Contains(ddlPrograms.SelectedValue.ToString) Then
End If
Return programs
End Function
Поскольку кто-то интересовался функцией Get_Results, вот код для этого.
'Runs the passed query and returns each row as an object within an ArrayList
Function Get_Results(ByVal query As String, ByVal ConnectionStringName As String) As ArrayList
Dim sqlComm As Data.SqlClient.SqlCommand = Get_Connection(query, ConnectionStringName)
'Open that connection
sqlComm.Connection.Open()
'Execute the query and store all of the results into the SqlDataReader.
Dim sqlRead As Data.SqlClient.SqlDataReader = sqlComm.ExecuteReader()
Dim result As ArrayList = New ArrayList
'Read each row one by one.
While sqlRead.Read()
'Create an object of the size needed.
Dim row(sqlRead.FieldCount - 1) As Object
'Fill the row object with the values.
sqlRead.GetValues(row)
'Add the result object to the array.
result.Add(row)
End While
'Close all open connections to the database.
sqlRead.Close()
sqlComm.Connection.Close()
Return result
End Function
Что вы пытались и что не работает в том, что вы пробовали? В какой части всего кода вы испытываете проблемы с дублированием в VB?Это факт, что это 2D-массив, который вызывает у вас горе? –
@SteveDog Я редактировал вопрос, чтобы показать, где я был на VB.NET-коде, прежде чем получить frusturated и написать код примера PHP, чтобы помочь мне работать с ним логически и точно знать, что мне нужно. – Ryan
Что такое подпись метода Get_Results, который вы вызываете? –