За последние 24 часа нас посетили 16562 программиста и 1644 робота. Сейчас ищут 1337 программистов ...

Обработка массива, как сделать?

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

  1. lamok

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

    С нами с:
    16 июн 2008
    Сообщения:
    64
    Симпатии:
    1
    Добрый день.
    Нужна помощь по обработке массива, не могу понять как сделать:

    Есть из 100 элементов массив вида:
    PHP:
    1. $array = array( '0' = > '22', ... '99' = > '8');
    Нужно каждые элементы с номерами 0, 1, 2, 3, 4 и далее с прибавкой 5 занести в новый массив при этом номер элемента у первых 5 должен быть одинаковым а у следующих 5 элементов на 1 больше в котором получается будут 20 элементов

    перебирая данный массив нужно сделать массив вида:
    PHP:
    1. $array_2[0]['one']='22' ... $array_2[0]['five']
    2. ....
    3. $array_2[19]['one'] ... $array_2[19]['five']='8'
     
  2. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @lamok
    Код (Text):
    1. foreach($arraay as $key=>$value){
    2. if($key<5){$newarray[$key]=$value+5;}else{$newarray[$key+1]=$value+5;}
    но условия задачи не ясны..
     
  3. lamok

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

    С нами с:
    16 июн 2008
    Сообщения:
    64
    Симпатии:
    1
    Вот что пока придумал, заодно по яснее будет что нужно
    PHP:
    1. $j= 0;
    2. $k = 0;
    3. $l = 1;
    4. foreach ( $t as $r) {
    5.             if ( $i == $k ) {
    6.                 $data_arr[$j]['one'] = $r;
    7.                 $j = $j +1;
    8.                 $k = $k + 6;
    9.             } //вот это условие прописывать для каждого нужно получается, хотелось покороче..
    10.           if ( $i == $l ) {
    11.                 $data_arr[$j]['two'] = $r;
    12.                 $j = $j +1;
    13.                 $l = $l + 6;
    14.             } //а вот это уже не идет т.к.  $i = следующему элементу
    15.             $i = $i +1;}
     
    #3 lamok, 22 мар 2018
    Последнее редактирование: 22 мар 2018
  4. uncletobe

    uncletobe Новичок

    С нами с:
    22 мар 2018
    Сообщения:
    1
    Симпатии:
    0
    я не знаю,что ты там хотел сделать,но лучше выложи задание...
     
    #4 uncletobe, 22 мар 2018
    Последнее редактирование: 22 мар 2018
  5. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @lamok
    не понял, код в условиях же идентичен, зачем тогда условия?
     
  6. lamok

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

    С нами с:
    16 июн 2008
    Сообщения:
    64
    Симпатии:
    1
    Мне нужно создать массив который будет содержать в первом элементе двумерный массив со значением элемента 1,2,..5 из первого массива и так для каждых 5 елементов
    вот что я придумал (только уже элементов 7 нужно) - это для 1 и 2 элемента, просто если элементов будет много код увеличивается очень сильно

    PHP:
    1. $i= 0;
    2.         $j= 0;
    3.         $k = 0;
    4.          foreach ( $t as $r) { //для элементов с номерами, 0, 6, 12 и тд
    5.             if ( $i == $k ) {
    6.                 $data_arr[$j]['one'] = $r;
    7.                 $j = $j + 1;
    8.                 $k = $k + 6;
    9.             }
    10.             $i = $i +1;
    11.         }
    12.        
    13.         $i= 0;
    14.         $j= 0;
    15.         $k = 1;
    16.         foreach ( $t as $r) { //для элементов с номерами, 1, 7, 13 и тд
    17.                if ( $i == $k ) {
    18.                 $data_arr[$j]['two'] =$r);
    19.                 $j = $j + 1;
    20.                 $k = $k + 6;
    21.             }
    22.             $i = $i +1;
    23.         }
     
  7. abrdabr

    abrdabr Новичок

    С нами с:
    28 янв 2017
    Сообщения:
    774
    Симпатии:
    65
    @lamok
     
  8. lamok

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

    С нами с:
    16 июн 2008
    Сообщения:
    64
    Симпатии:
    1
    Нет не так.
    есть массив
    0=11, 1=5, 2=5, 3=1, 4=3, 5=56, 6=44, 7=23, 8=22 9=66

    мне нужны каждые первые пять элементов, первые пять в новый массив с индексом 0, вторые пять с индексом 1
    получается приблизительно такой новый массив

    [0][one]=11 [0][two]=5 [0][three]=1 ... [0][five]=3
    [1][one]=56 [1][two]=5 [1][three]=1 ... [1][five]=66

    только еще бы хотелось чтобы кратность элементов можно было менять (не каждые пять а каждые 10 к примеру)!
     
  9. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.861
    Симпатии:
    751
    Адрес:
    Татарстан
    походу - разбить типа на группы?
    то есть выходной массив - массив групп по N элементов в каждой?
    тогда как то так
    PHP:
    1.     $input = array(1,2,3,4,5,6,7,8,9,10,33,44,55);
    2.     $N = 3;
    3.     $output = array();
    4.     for ($i=0; $i<COUNT($input);$i=$i+$N) {
    5.         $output[] = array_slice($input, $i, $N);
    6.     }
    7.     print_r($output);
    ну по последней группе там надо определиться - или остатки как щас...
    или если хотите - то дополняете нулями или еще как
     
    lamok нравится это.
  10. lamok

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

    С нами с:
    16 июн 2008
    Сообщения:
    64
    Симпатии:
    1
    то что надо...
    Спасибо.


    А можно не индексы к результируещему массиву а слова, это удобнее?
    т.е. не
    [0][1]=11
    а [0][one]=11
     
    #10 lamok, 22 мар 2018
    Последнее редактирование: 22 мар 2018
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    фигасе ты телепат
     
    Danil005 нравится это.
  12. AlexandrS

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

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Возможно у человека большой опыт общения с заказчиками :)
     
  13. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.861
    Симпатии:
    751
    Адрес:
    Татарстан