Если вы не видите никакого результата из вашего кода PHP и / или видите части своего литерального исходного кода PHP на веб-странице вы можете быть уверены, что ваш PHP на самом деле не выполняется. Если вы используете View Source в своем браузере, вы, вероятно, видите весь исходный код PHP-файла. Поскольку PHP-код встроен в теги , браузер попытается интерпретировать их как HTML-теги, и результат может выглядеть несколько смущенным.
Чтобы на самом деле запустить ваши PHP-скрипты, вам нужно:
* Если вы не переконфигурируете его, все может быть настроено.
Это последнее особенно важно. Двойной щелчок по файлу, скорее всего, откроет его в вашем браузере, используя такой адрес, как:
file://C:/path/to/my/file.php
Это полностью обходит любой веб-сервер, который у вас может быть запущен, и файл не интерпретируется. Вам нужно посетить URL-адрес файла на вашем веб-сервере, вероятно, что-то вроде:
http://localhost/my/file.php
Вы также можете проверить, используете ли вы короткие открытые теги вместо
и ваша PHP-конфигурация отключила короткие открытые теги.
Также см. PHP-код не выполняется, вместо этого код отображается на странице
Можно удалить элементы из набора при использовании простого for
цикл.
Смотрят на этот пример:
var l = new List<int>();
l.Add(0);
l.Add(1);
l.Add(2);
l.Add(3);
l.Add(4);
l.Add(5);
l.Add(6);
for (int i = 0; i < l.Count; i++)
{
if (l[i] % 2 == 0)
{
l.RemoveAt(i);
i--;
}
}
foreach (var i in l)
{
Console.WriteLine(i);
}
Итерация Назад через Список походит на лучший подход, потому что, если Вы удаляете элемент и другие элементы, "попадают в разрыв", который не имеет значения, потому что Вы уже посмотрели на тех. Кроме того, Вы не должны волноваться о своей переменной счетчика, становящейся более крупными, чем.Count.
List<int> test = new List<int>();
test.Add(1);
test.Add(2);
test.Add(3);
test.Add(4);
test.Add(5);
test.Add(6);
test.Add(7);
test.Add(8);
for (int i = test.Count-1; i > -1; i--)
{
if(someCondition){
test.RemoveAt(i);
}
}
Беря @bruno код, я сделал бы это назад.
, поскольку, когда Вы перемещаетесь назад, недостающие индексы массива не вмешиваются в порядок Вашего цикла.
var l = new List<int>(new int[] { 0, 1, 2, 3, 4, 5, 6 });
for (int i = l.Count - 1; i >= 0; i--)
if (l[i] % 2 == 0)
l.RemoveAt(i);
foreach (var i in l)
{
Console.WriteLine(i);
}
, Но seriuosly, в эти дни, я использовал бы LINQ:
var l = new List<int>(new int[] { 0, 1, 2, 3, 4, 5, 6 });
l.RemoveAll(n => n % 2 == 0);
Так как Вы работаете с DataTable и должны быть в состоянии сохраниться, любой возвращается к серверу с адаптером таблицы (см. комментарии), вот пример того, как необходимо удалить строки:
DataTable dt;
// remove all rows where the last name starts with "B"
foreach (DataRow row in dt.Rows)
{
if (row["LASTNAME"].ToString().StartsWith("B"))
{
// mark the row for deletion:
row.Delete();
}
}
Вызов удаляет на строках, изменит их свойство RowState на Удаленный, но покинет удаленные строки в таблице. Если все еще необходимо работать с этой таблицей, прежде чем сохранение возвратится к серверу (как то, если Вы хотите отобразить содержание таблицы минус удаленные строки), необходимо проверить RowState каждой строки, поскольку Вы выполняете итерации через него как это:
foreach (DataRow row in dt.Rows)
{
if (row.RowState != DataRowState.Deleted)
{
// this row has not been deleted - go ahead and show it
}
}
строки Удаления от набора (как в ответе bruno) повредят адаптер таблицы и не должны обычно делаться с DataTable.
Некоторое время цикл обработал бы это:
int i = 0;
while(i < list.Count)
{
if(<codition for removing element met>)
{
list.RemoveAt(i);
}
else
{
i++;
}
}
решение chakrit может также использоваться при предназначении для.NET 2.0 (никакие выражения LINQ/lambda) при помощи делегата, а не лямбда-выражения:
public bool IsMatch(int item) {
return (item % 3 == 1); // put whatever condition you want here
}
public void RemoveMatching() {
List<int> x = new List<int>();
x.RemoveAll(new Predicate<int>(IsMatch));
}
Удаление или добавление к списку, пока итерация через него может повредить его, как Вы сказали.
я часто использовал два подхода списка для решения проблемы:
ArrayList matches = new ArrayList(); //second list
for MyObject obj in my_list
{
if (obj.property == value_i_care_about)
matches.addLast(obj);
}
//now modify
for MyObject m in matches
{
my_list.remove(m); //use second list to delete from first list
}
//finished.
Когда я должен удалить объект из набора, который я перечисляю, я обычно перечисляю его наоборот.