Счетчик в цикле

Poltoraki

Новичок
Счетчик в цикле

Тут наверное что-то ну совсем простое, но туплю второй день. Гляньте, пожалуйста.
Проверяем какие чекбоксы кликнуты и формуруем строку:

for ($i = 0; $i <= 62; $i++)
{
if ($_REQUEST['cbxOutParam'][$i])
{
$QueryString = $QueryString . $_REQUEST['cbxOutParam'][$i];
}
}

Все просто, понятно и замечательно работает. Теперь мне нужно сохранить номера чекбоксов, которые были отмечены добавляем:

for ($i = 0; $i <= 62; $i++)
{
if ($_REQUEST['cbxOutParam'][$i])
{
$arrOPNumber[] = $i;
$QueryString = $QueryString . $_REQUEST['cbxOutParam'][$i];
}
}

При проверке содержимого $arrOPNumber[] оказывается, что туда пишется не значение $i, а что-то не понятное: если был включен один бокс, то 0, два - 01, три - 012. И не понятно куда девается текущее $i?
 

Poltoraki

Новичок
Ребят, вот не в обиду, но у вас потрясающая манера ответов но вопросы. Я все понимаю: и воросы идиотские, и одно и тоже по 1000 раз спрашивают, да все это достает. Просто получается так - ты умный тебе ответим, а ты дурак, иди туда. Я не профессиональный програмист и пришел к людям с вопросом, причем я не прошу за меня код написать, а прошу подсказать куда копать. Да, я включал сообщения об ошибках, да распечатывал значение в разных местах, ну не понимаю почему так происходит, ну тупой, ну что поделаешь. Вы тогда закройте форум и сделайте его только для своих и никто не будет вас раздражать идиотскими вопросами. Заидите как-нибудь на www.aspnetmania.com и поглядите как там народ общается. И код никто ни закого не пишет. Просто обидно - у вас отличный ресурс, а разговаривать не умеете.
Сорри за нравоучения и эмоции.
 

Tor

Новичок
перед циклом
$arrOPNumber[]=new array();

после цикла
var_dump($arrOPNumber);
 

Poltoraki

Новичок
Ну вот, получилось как руки человеку вывернул :)

По существу.
массив явно не об'являл, т.к. мануал гласит:
$arr[key] = value;
$arr[] = value;
// key may be an integer or string
// value may be any value
If $arr doesn't exist yet, it will be created.

Вместо var_dump пользовал print_r.

Но на самом деле это ничего не меняет. Если у меня отмечен первый и последний чекбокс ($i=0 и $i=62), то вот что говорит print_r:
если об'являть как ты говоришь, то это добавляет лишний элемент в массив- Array ( [0] => Array ( ) [1] => 0 [2] => 1 ), если как я- Array ( [0] => 0 [1] => 1 )

var_dump для обоих случаев:
array(3) { [0]=> array(0) { } [1]=> int(0) [2]=> int(1) }
array(2) { [0]=> int(0) [1]=> int(1) }

откуда это берется хоть режь, не понимаю!! При этом значение самого чекбокса вынимается именно то, что нужно - из самого первого и самого последнего.
 

SelenIT

IT-лунатик :)
Видимо, все-таки $arrOPNumber=new array(); :)

а по существу - не проще ли
PHP:
$arrOPNumber = array_keys($_REQUEST['cbxOutParam']);


Стоп. Poltoraki, покажи, как ты формируешь массив чекбоксов в самой форме. Похоже, разгадка именно там.

Хотя я и так угадаю: наверняка что-то вроде <input type="checkbox" name="cbxOutParam[]">.
 

Poltoraki

Новичок
SelenIT
>Видимо, все-таки $arrOPNumber=new array();
A почему? Об'ясни по жалуйста.

>$arrOPNumber = array_keys($_REQUEST['cbxOutParam']);
Ничего не меняет. При первом и последнем чекнутом боксе:
array(2) { [0]=> int(0) [1]=> int(1) }

Но самый прикол вот в чем. Если забыть про массив, а просто поставить echo "$i \n"; перед if ($_REQUEST['cbxOutParam'][$i])
и сразу после него, то печататся такая хрень (первый и последний боксе чекнуты)
перед: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62, т.е идет перебор значения, как и надо
после: 0 1
Ну как так может быть?!

-~{}~ 21.06.05 20:10:

Массив боксов формируется так:
<?php
for ($i = 0; $i <=62; $i++)
{
echo ("<td>");
echo ("<input type='checkbox' name='cbxOutParam[]' value='$arrColumnNames[$i]'> $arrParamText[$i]");
echo ("</td> \n");
if (is_integer(($i+1)/3))
{
echo ("</tr><tr>");
}
}
?>
 

SelenIT

IT-лунатик :)
Моя догадка подтвердилась). Суть в том, что ты не нумеруешь чекбоксы в форме, а по сути доверяешь делать это принимающему скрипту. А скрипт, естественно, может пронумеровать только чекнутые боксы - о других он просто понятия не имеет. Что мы и наблюдаем.

У Torа была опечатка - квадратные скобки при инициализации массива не нужны. Из-за них и появлялся лишний элемент - пустой массив.

В общем, замени в своей форме
PHP:
echo ("<input type='checkbox' name='cbxOutParam[]' value=...
на
PHP:
echo ("<input type='checkbox' name='cbxOutParam[$i]' value=...
и будет счастье :)
 

Poltoraki

Новичок
Про массив понял, спасибо! :)


Да, ты прав, счастье есть! :)
Спасибо огромное!!!! Сам бы в жизни не допер!!!
Спасибо еще раз! :)
 
Сверху