За последние 24 часа нас посетили 17004 программиста и 1786 роботов. Сейчас ищут 962 программиста ...

Перемешивание двух массивов по соотношению "1к3"

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

  1. EleGant23

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

    С нами с:
    30 мар 2013
    Сообщения:
    5
    Симпатии:
    0
    Добрый день. Возникла задача перемешать два массива по соотношению 1к3
    Т.е. 2 массива.
    1 массив
    100,200,300,400,500
    2 массив
    111,112,113,114,115,116,117,118,119,120

    Должно выйти в новом массиве
    100,111,112,113,200,114,115,116,300,117,118,119,400,120

    Никак не могу сообразить...может подскажите какую-то функцию, спасибо
     
  2. gruth

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

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
  3. EleGant23

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

    С нами с:
    30 мар 2013
    Сообщения:
    5
    Симпатии:
    0
    Код (Text):
    1. $pervo=Array();
    2. $sql = "SELECT * FROM  `zayvki` WHERE `prioretet`='2' AND `status`='1' AND `let`='2' ORDER BY `dataZayvki` ASC";
    3. $result = mysql_query($sql);
    4. while ($itog = mysql_fetch_array($result, MYSQL_ASSOC))
    5. {
    6.     $pervo[]=$itog['id'];
    7. }
    8.  
    9. $obych=Array();
    10. $sql = "SELECT * FROM  `zayvki` WHERE `prioretet`='0' AND `status`='1' AND `let`='2' ORDER BY `dataZayvki` ASC";
    11. $result = mysql_query($sql);
    12. while ($itog = mysql_fetch_array($result, MYSQL_ASSOC))
    13. {
    14.     $obych[]=$itog['id'];
    15. }
    Вот мои два массива, надо что бы массив $pervo смешался с $obych по соотношению 1 к 3
     
  4. gruth

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

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    Попробуй тогда uksort
    А лучше подробнее расскажи, тут можно джоином обойтись
     
  5. EleGant23

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

    С нами с:
    30 мар 2013
    Сообщения:
    5
    Симпатии:
    0
    Вообщем есть таблица в БД - ОЧЕРЕДЬ...
    там есть колонки ID,NAME,nomerOcheredi,prioretet

    Нужно сделать выборку таким образом что бы выбрать всех из таблица где prioretet (0,1), и что бы выборка дала результат
    одного с приорететом 1, затем ТРЕХ с приорететом 0, затем заново ОДНОГО с приоеретом 1, затем ТРЕХ с приорететом 0..и так до конца пока все записи не кончатся...
    известо что с приоеретом 1 меньше в разы...т.е. когда закончатся с приоритетом 1, просто продолжил выбирать всех с приорететом 0
     
  6. gruth

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

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    А тебе в итоге нужны только ид или полноценные записи?
    Для начала сделай выборку одним запросом к бд
     
  7. EleGant23

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

    С нами с:
    30 мар 2013
    Сообщения:
    5
    Симпатии:
    0
    Достаточно просто ИД
    --- Добавлено ---
    Получается я хочу в результатах выборки в переменную дописывтаь +1, а затем обновить эту же запись в таблицы и обновить nomerOcheredi...
     
  8. gruth

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

    С нами с:
    13 май 2017
    Сообщения:
    224
    Симпатии:
    18
    делаешь
    Код (Text):
    1.  
    2. select * from zayvki
    3. where prioritet in(0, 2) and status=1 and let=2
    4.  
    5. order by `dataZayvki` ASC
    потом
    PHP:
    1. $res = [0 => [], 2 => []];
    2. while ($itog = mysql_fetch_array($result, MYSQL_ASSOC))
    3. {
    4.     $res[$itog['prioritet']][] = $itog;
    5. }
    и смотришь что вышло
     
  9. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @EleGant23, если "на пальцах", то:
    PHP:
    1. $arr1 = [100,200,300,400,500];
    2. $arr2 = [111,112,113,114,115,116,117,118,119,120];
    3. $arr = [];
    4. $elem2 = reset($arr2);
    5. $elem = reset($arr1);
    6. while($elem !== false) {
    7.     $arr[] = $elem;
    8.     $cnt = 3;
    9.     while($elem2 !== false && $cnt--) {
    10.         $arr[] = $elem2;
    11.         $elem2 = next($arr2);
    12.     }
    13.     if($elem2 === false) {
    14.         break;
    15.     }
    16.     $elem = next($arr1);
    17. }
    18. //while($elem2 !== false) {
    19. //    $arr[] = $elem2;
    20. //    $elem2 = next($arr2);
    21. //}
    22.  
    23. var_dump($arr);
    В зависимости от того, что делать с "хвостами" массивов - или закомментировать if ... break, или раскомментировать завершающий while. Или и то и другое :)