За последние 24 часа нас посетили 22842 программиста и 1257 роботов. Сейчас ищут 677 программистов ...

Странный результат вложенных циклов при работе с массивами. Помогите!

Тема в разделе "PHP для новичков", создана пользователем Anagar, 6 мар 2018.

  1. Anagar

    Anagar Новичок

    С нами с:
    11 янв 2016
    Сообщения:
    3
    Симпатии:
    0
    Странный результат вложенных циклов при работе с массивами. Помогите!

    PHP:
    1.     <?php
    2.         $all_wood = array(2,1,22,13,25,3,31,5);
    3.         $arr_poligon1 = array();
    4.         $arr_poligon2 = array();
    5.         for($i=0;$i!=4;$i++){
    6.             for($i2=0;$i2!=4;$i2++){
    7.                 if (in_array(($a), $all_wood)){
    8.                     $arr_poligon2[] = "wood";
    9.                 }else{
    10.                     $arr_poligon2[] = "grass";
    11.                 }
    12.             }
    13.             $arr_poligon1[] = $arr_poligon2;
    14.         }
    15.         print_r  ($arr_poligon1) ;
    16.     ?>
    По задумке результат данного кода должен быть таким:

    Array
    (
    [0] => Array
    (
    [0] => wood
    [1] => wood
    [2] => wood
    [3] => grass
    )

    [1] => Array
    (
    [0] => wood
    [1] => wood
    [2] => wood
    [3] => grass
    )

    [2] => Array
    (
    [0] => wood
    [1] => wood
    [2] => wood
    [3] => grass
    )

    [3] => Array
    (
    [0] => wood
    [1] => wood
    [2] => wood
    [3] => grass
    )

    )

    Но происходит это:

    Array
    (
    [0] => Array
    (
    [0] => wood
    [1] => wood
    [2] => wood
    [3] => grass
    )

    [1] => Array
    (
    [0] => wood
    [1] => wood
    [2] => wood
    [3] => grass
    [4] => wood
    [5] => grass
    [6] => grass
    [7] => grass
    )

    [2] => Array
    (
    [0] => wood
    [1] => wood
    [2] => wood
    [3] => grass
    [4] => wood
    [5] => grass
    [6] => grass
    [7] => grass
    [8] => grass
    [9] => grass
    [10] => grass
    [11] => grass
    )

    [3] => Array
    (
    [0] => wood
    [1] => wood
    [2] => wood
    [3] => grass
    [4] => wood
    [5] => grass
    [6] => grass
    [7] => grass
    [8] => grass
    [9] => grass
    [10] => grass
    [11] => grass
    [12] => wood
    [13] => grass
    [14] => grass
    [15] => grass
    )

    )

    То есть с каждым выполнением цикла первого for добавляется 4 цикла во второй for. Этого мне не нужно. Что не так с этим кодом? Не пойму.
     
    #1 Anagar, 6 мар 2018
    Последнее редактирование модератором: 7 мар 2018
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    $arr_poligon2 = array();
    в первый цикл вложи
     
    Anagar нравится это.
  3. Anagar

    Anagar Новичок

    С нами с:
    11 янв 2016
    Сообщения:
    3
    Симпатии:
    0
    Спасибо, это помогло. Но почему же так происходило?
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    не стираешь записи предыдущего прохода
     
    Anagar нравится это.
  5. Anagar

    Anagar Новичок

    С нами с:
    11 янв 2016
    Сообщения:
    3
    Симпатии:
    0
    Я понял! Спасибо большое.