Подсчет индекса с использованием PHP для циклов - PullRequest
1 голос
/ 02 декабря 2011

Итак, у меня есть этот кусок кода PHP,

$countRows = count($meta[text_group]);
for ($ind = 0; $ind < $countRows; $ind ++ ) {
    echo '<input type="hidden" name="my-item-option['.$ind.'][name]" value="'.$meta[text_group][$ind][text_name].'" />';    
    echo '<input type="text" name="my-item-option['.$ind.'][value]" />'; 
}

$countRows = count($meta[textarea_group]);
for ($ind = 0; $ind < $countRows; $ind ++ ) {
    echo '<input type="hidden" name="my-item-option['.$ind.'][name]" value="'.$meta[textarea_group][$ind][textarea_name].'" />';    
    echo '<textarea rows="10" name="my-item-option['.$ind.'][value]" cols="30"></textarea>'; 
}

Это производит как HTML,

    <input type="hidden" name="my-item-option[0][name]" value="Text Name 1" />
    <input type="text" name="my-item-option[0][value]" />
    <input type="hidden" name="my-item-option[1][name]" value="Text Name 2" />
    <input type="text" name="my-item-option[1][value]" />

    <input type="hidden" name="my-item-option[0][name]" value="Text Area Name 1" />
    <textarea rows="10" name="my-item-option[0][value]" cols="30"></textarea>
    <input type="hidden" name="my-item-option[1][name]" value="Text Area Name 2" />
    <textarea rows="10" name="my-item-option[1][value]" cols="30"></textarea>
    <input type="hidden" name="my-item-option[2][name]" value="Text Area Name 3" />
    <textarea rows="10" name="my-item-option[2][value]" cols="30"></textarea>               

Обратите внимание, что атрибут name в каждом входе / текстовой области назначается с индексом из переменной $ ind, например, my-item-option [0] [name], my-item-option [0] [value]. То, что я пытаюсь достичь как HTML, это следующее ...

    <input type="hidden" name="my-item-option[0][name]" value="Text Name 1" />
    <input type="text" name="my-item-option[0][value]" />
    <input type="hidden" name="my-item-option[1][name]" value="Text Name 2" />
    <input type="text" name="my-item-option[1][value]" />

    <input type="hidden" name="my-item-option[2][name]" value="Text Area Name 1" />
    <textarea rows="10" name="my-item-option[2][value]" cols="30"></textarea>
    <input type="hidden" name="my-item-option[3][name]" value="Text Area Name 2" />
    <textarea rows="10" name="my-item-option[3][value]" cols="30"></textarea>
    <input type="hidden" name="my-item-option[4][name]" value="Text Area Name 3" />
    <textarea rows="10" name="my-item-option[4][value]" cols="30"></textarea>               

Итак, вместо переменной $ ind, сбрасываемой в 0, я хочу, чтобы она была непрерывной.

Надеюсь, я ясно дал понять.

Большое спасибо заранее.

Мэтт

Ответы [ 4 ]

2 голосов
/ 02 декабря 2011

Замените второй цикл for на это:

for ($i = $ind; $i < ($countRows + $ind) ; $i ++ )

И используйте $ i вместо $ ind внутри цикла

0 голосов
/ 02 декабря 2011

Не делайте ничего сложного с вашими индексами цикла, это только сделает ваш код труднее для чтенияЯ бы использовал индекс цикла исключительно для цикла и сделал бы другую переменную для хранения общего индекса.

0 голосов
/ 02 декабря 2011

Если count ($ meta [textarea_group]) больше чем count ($ meta [text_group]); , вам просто нужно пропустить первое начальное значение для второго цикла

$countRows = count($meta[text_group]);
for ($ind = 0; $ind < $countRows; $ind ++ ) {
    echo '<input type="hidden" name="my-item-option['.$ind.'][name]" value="'.$meta[text_group][$ind][text_name].'" />';    
    echo '<input type="text" name="my-item-option['.$ind.'][value]" />'; 
}

$countRows = count($meta[textarea_group]);
for (; $ind < $countRows; $ind ++ ) {
    echo '<input type="hidden" name="my-item-option['.$ind.'][name]" value="'.$meta[textarea_group][$ind][textarea_name].'" />';    
    echo '<textarea rows="10" name="my-item-option['.$ind.'][value]" cols="30"></textarea>'; 
}
0 голосов
/ 02 декабря 2011

Хорошо, так что мой первый взлом был неверным :) Если исходить из того, что предложил @Andre, я думаю, вы также захотите изменить свой второй цикл, чтобы использовать $ i в качестве индекса вместо $ ind, поскольку $ ind никогда не увеличивается.

$countRows = count($meta[text_group]);
    for ($ind = 0; $ind < $countRows; $ind ++ ) {
        echo '<input type="hidden" name="my-item-option['.$ind.'][name]" value="'.$meta[text_group][$ind][text_name].'" />';    
        echo '<input type="text" name="my-item-option['.$ind.'][value]" />'; 
    }

    $countRows = count($meta[textarea_group]);
    for ($i = $ind; $i < ($countRows + $ind) ; $i ++ ) {
        echo '<input type="hidden" name="my-item-option['.$i.'][name]" value="'.$meta[textarea_group][$ind][textarea_name].'" />';    
        echo '<textarea rows="10" name="my-item-option['.$i.'][value]" cols="30"></textarea>'; 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...