За последние 24 часа нас посетили 5929 программистов и 448 роботов. Сейчас ищут 124 программиста ...

Четные и нечетные составляющее массива

Тема в разделе "PHP для новичков", создана пользователем smartCreate, 19 июн 2017 в 21:02.

  1. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    84
    Симпатии:
    3
    Добрый день! Вывожу на страницу, пользователей из БД вот таким форычем:

    PHP:
    1. <?    $user = $post_array[13]; foreach ($user as $user): ?>
    2.               <?=$user['first_name']?><br>
    3.               <?=$user['last_name']?>
    4. <?    endforeach?>
    На странице есть 2 html блока, например:
    HTML:
    1.  
    2. <div class="even"></div>
    3. <div class="odd"></div>
    4.  
    Мне нужно в блок .even вывести форычем данные из массива, которые являются четными в порядке, а в .odd соответственно нечетные.

    Подскажите пожалуйста как этом можно сделать?
     
  2. denis01

    denis01 Старожил
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    10.838
    Симпатии:
    1.410
    Адрес:
    Молдова, г.Кишинёв
    можно массив засунуть в многомерный массив по два элемента в массиве array_chunk или посчитать остаток от деления, например так if($i%0 == 0) делать odd else делать even, не забывай инкрементировать $i++ в конце цикла

    https://secure.php.net/manual/ru/language.operators.arithmetic.php
     
  3. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    84
    Симпатии:
    3
    Прошу прощения, но мне не совсем понятно.

    Относительно array_chunk идея классная, но я не до конца ее понимаю, есть у меня массив
    PHP:
    1. $user['first_name']
    в нем содержаться фамилии пользователей. Допустим он содержит:

    PHP:
    1. ['Иванов', 'Петров', 'Сидоров', 'Левочкин']
    Пропущу я этот массив через array_chunk, вот так:
    PHP:
    1. array_chunk($user['first_name'],  2)
    В результате получу 2 массива:
    PHP:
    1. //
    2. ['Иванов', 'Петров']
    3. //
    4. ['Сидоров', 'Левочкин']
    Следовательно первая позиция в массиве это нечетная позиция, вторая четная. Вывести их я могу вот так:
    PHP:
    1. //Не четная позиция
    2. array_shift(array_chunk($user['first_name'],  2))
    3.  
    4. //Четная позиция
    5. array_pop(array_chunk($user['first_name'],  2))
    Правильно ли я поймал ход ваших мыслей? Если да, то не могли бы вы мне еще подсказать как мне все это объединить с моим форычем и html блоками, потому что я пытаюсь вставить в форычь array_chunk($user['first_name'], 2) - нарываюсь на ошибку "Message: array_chunk() expects parameter 1 to be array, string given"

    Делаю так:

    PHP:
    1. <?    $user = $post_array[13]; foreach ($user as $user): ?>
    2.             <?=array_chunk($user['first_name'], 2)?>
    3. <?    endforeach?>
    * Понимаю что скорее всего делаю в корне не верно, но не знаю как поступить иначе
     
  4. denis01

    denis01 Старожил
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    10.838
    Симпатии:
    1.410
    Адрес:
    Молдова, г.Кишинёв
    просто в цикле получаешь в $value массив и выводи данные как индекс 0 even, а 1 odd
     
  5. smartCreate

    smartCreate Новичок

    С нами с:
    4 ноя 2016
    Сообщения:
    84
    Симпатии:
    3
    Прошу прощения, но я и вовсе запутался..., если вы не против "раскрою все карты", то есть покажу что должно получиться в итоге:
    PHP:
    1.         <?    $user = $post_array[13]; foreach ($user as $user): ?>
    2.                 <div class="slider-grid">
    3.                     <figure class="snip1091 navy">
    4.                         <div class="designation-panel">
    5.                             <?    if ( $user['vip'] == 'true' ) { ?>
    6.                                 <img src="<?=base_url()?>include/img/vip.png" alt="">
    7.                             <?    }?>
    8.                             <?    if ( $user['verification'] == 'true' ) { ?>
    9.                                 <img src="<?=base_url()?>include/img/verification.png" alt="">
    10.                             <?    }?>
    11.                         </div>
    12.                         <img src="<?=$user['bacground']?>" alt="<?=$user['first_name']?><?=$user['last_name']?>"/>
    13.                         <figcaption>
    14.                             <p><?=$user['first_name']?> <span><?=$user['last_name']?></span></p>
    15.                         </figcaption>
    16.                         <a href="<?=base_url()?>profil/id<?=$user['id']?>"></a>
    17.                     </figure>
    18.                 </div>
    19.            <?    endforeach?>
    В цикле у меня формируется блок class="slider-grid", это блок является слайдом, а все что находиться в class="snip1091 navy это содержимое слайда. Сейчас цикл формирует вот такую структуру:
    HTML:
    1.  
    2. <div class="slider-grid">
    3.        <figure class="snip1091 navy">
    4.               <!-- какое то содержимое -->
    5.         </figure>
    6. </div>
    7. <div class="slider-grid">
    8.        <figure class="snip1091 navy">
    9.               <!-- какое то содержимое -->
    10.         </figure>
    11. </div>
    12. <div class="slider-grid">
    13.        <figure class="snip1091 navy">
    14.               <!-- какое то содержимое -->
    15.         </figure>
    16. </div>
    17. <div class="slider-grid">
    18.        <figure class="snip1091 navy">
    19.               <!-- какое то содержимое -->
    20.         </figure>
    21. </div>
    22. <!-- И Т.Д. -->
    23.  
    А мне нужно что бы было вот так:

    HTML:
    1.  
    2. <div class="slider-grid">
    3.        <figure class="snip1091 navy">
    4.               <!-- какое то содержимое -->
    5.         </figure>
    6.         <figure class="snip1091 navy">
    7.               <!-- какое то содержимое -->
    8.         </figure>
    9. </div>
    10. <div class="slider-grid">
    11.        <figure class="snip1091 navy">
    12.               <!-- какое то содержимое -->
    13.         </figure>
    14.          <figure class="snip1091 navy">
    15.               <!-- какое то содержимое -->
    16.         </figure>
    17. </div>
    18. <!-- И Т.Д. -->
    19.  
    То есть цикл должен иметь вид, типа:
    PHP:
    1.         <?    $user = $post_array[13]; foreach ($user as $user): ?>
    2.                 <div class="slider-grid">
    3.                     <figure class="snip1091 navy">
    4.                         <div class="designation-panel">
    5.                             <?    if ( $user['vip'] == 'true' ) { ?>
    6.                                 <img src="<?=base_url()?>include/img/vip.png" alt="">
    7.                             <?    }?>
    8.                             <?    if ( $user['verification'] == 'true' ) { ?>
    9.                                 <img src="<?=base_url()?>include/img/verification.png" alt="">
    10.                             <?    }?>
    11.                         </div>
    12.                         <img src="<?=$user['bacground']?>" alt="<?=$user['first_name']?><?=$user['last_name']?>"/>
    13.                         <figcaption>
    14.                             <p><?=$user['first_name']?> <span><?=$user['last_name']?></span></p>
    15.                         </figcaption>
    16.                         <a href="<?=base_url()?>profil/id<?=$user['id']?>"></a>
    17.                     </figure>
    18.  
    19.                     <figure class="snip1091 navy">
    20.                         <div class="designation-panel">
    21.                             <?    if ( $user['vip'] == 'true' ) { ?>
    22.                                 <img src="<?=base_url()?>include/img/vip.png" alt="">
    23.                             <?    }?>
    24.                             <?    if ( $user['verification'] == 'true' ) { ?>
    25.                                 <img src="<?=base_url()?>include/img/verification.png" alt="">
    26.                             <?    }?>
    27.                         </div>
    28.                         <img src="<?=$user['bacground']?>" alt="<?=$user['first_name']?><?=$user['last_name']?>"/>
    29.                         <figcaption>
    30.                             <p><?=$user['first_name']?> <span><?=$user['last_name']?></span></p>
    31.                         </figcaption>
    32.                         <a href="<?=base_url()?>profil/id<?=$user['id']?>"></a>
    33.                     </figure>
    34.                 </div>
    35.            <?    endforeach?>
    То есть в цикле не один блок class="snip1091 navy", а 2. Само собой если сделать так как я написал то в водно слайде будет выводиться 2 блока с идентичной информацией. По этому, мне и нужно добиться этой четности и нечетности вывода, что бы в первом class="snip1091 navy" цикла выводились четные элементы массива, а во втором нечетные. Может быть я не правильную формулировку придумал, можно сказать и так "нужно что бы элементы массива заносились через один, то есть со смещением".

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