За последние 24 часа нас посетил 18401 программист и 1605 роботов. Сейчас ищут 953 программиста ...

foreach полей в два столбца

Тема в разделе "PHP для новичков", создана пользователем Tchort, 30 мар 2011.

  1. Tchort

    Tchort Активный пользователь

    С нами с:
    7 дек 2010
    Сообщения:
    51
    Симпатии:
    0
    Есть <?foreach ($arResult["PROPERTY_LIST"] as $propertyID):?>

    Далее вывод список полей
    Код (Text):
    1. <input type="text" name="PROPERTY[<?=$propertyID?>][<?=$i?>]" size="25" value="<?=$value?>" /><br />
    Но вот как сделать чтобы эти поля выводили в два столбца?
     
  2. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    из описания не совсем ясно за что отвечает $i. если это ключ ассоциативного массива, то

    foreach($array as $key=>$value)

    если же это порядковый номер элемента в списке, то

    for($i = 0; $i < sizeof($array); $i++)
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    выводить в столбики это весьма интересная задача =)
     
  4. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Tchort
    Всё проще некуда.
    Перед началом цикла foreach почитай с помощью count количество элементов в массиве и раздели его на количество столбцов, округлив (например, 11 элементов / 2 столбца).
    Дальше строится цикл:

    PHP:
    1. <?php
    2.  
    3. foreach($array as $j => $data) {
    4.  //TODO: Body ...
    5. }
    6.  
    7. ?>
    В теле цикла проверяется ранее рассчитанная переменная, содержащая разность (делили на 2 когда).
    Если количество элементов превышает значение этой переменной, то выводим разрыв таблицы (</tr><tr>) и в начале и конце цикла <tr> и </tr> соответственно.
    Например так:

    PHP:
    1. <tr>
    2. <?php foreach($array as $j => $data): ?>
    3.   <?php if($j == $break): ?>
    4.    </tr>
    5.    <tr>
    6.   <?php endif ?>
    7. <?php endforeach?>
    8. </tr>
    Вот, вроде ничего не забыл.
     
  5. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Да че там интересного
    PHP:
    1. <input type="text"
    2.     name="PROPERTY[<?=$propertyID?>][<?=$i?>]"
    3.     size="25"
    4.     value="<?=$value?>"
    5.  />
    6. <?php if ($j%2==0) { ?>
    7.     <br />
    8. <?php } ?>
     
    askanim нравится это.
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну для новичка - интересно. во-первых можно найти еще несколько способов реализации, например использовать функцию пхп которая бьет массив на несколько заданного размера.

    а во-вторых, если нужно делать не горизонталями, а вертикалями, то задача для новичка неожиданно превращается в урок понимания концепции MVC и прочего, хотя это и не осознается, навык и расширение сознания от такой простой штуки весьма полезны.
     
  7. Tchort

    Tchort Активный пользователь

    С нами с:
    7 дек 2010
    Сообщения:
    51
    Симпатии:
    0
    Apple
    Спасибо.
     
  8. Tendor

    Tendor Новичок

    С нами с:
    18 авг 2016
    Сообщения:
    2
    Симпатии:
    0
    Если не известно количество столбцов, а записей в столбце должно быть $n. Тогда можно сделать так:
    Важно помнить, что ключи массива обычно начинается с 0) тогда как для 0 условие $key%$n == 0 будет true, по этому проверяем, что бы $key != 0
    Код (Text):
    1. <tr>
    2.     <?php foreach($array as $key => $value): ?>
    3.          <?php if($key%$n == 0 && $key != 0 ): ?></tr><tr><?php endif; ?>
    4.    <?php endforeach; ?>
    5. </tr>