За последние 24 часа нас посетили 8968 программистов и 490 роботов. Сейчас ищут 203 программиста ...

Как объединить массивы после цикла

Тема в разделе "PHP для новичков", создана пользователем sliderodessa, 13 сен 2020.

  1. sliderodessa

    sliderodessa Новичок

    С нами с:
    13 сен 2020
    Сообщения:
    3
    Симпатии:
    0
    Всем привет. Если, что, начинающий. Есть задача пройтись по многомерному массиву и проверить наличие четных чисел в каждом подмассиве. Если четных 2 числа, то заносим в новый массив, например $arr2. Если кол-во четных 3, то массив заносится в другой, типа $arr3 и так далее. В принципе, вопрос решил, но он мне не очень нравится. Через foreach, в котором условие if. Проблема в том, что в этом решении есть длинная строка
    if($val[0] % 2 == 0 && $val[1] % 2 == 0 && $val[2] % 2 == 0 && $val[3] % 2 == 0 && $val[4] % 2 == 0) от которой и хочется избавится. Т.е. проверяю каждый элемент, потом, если определенное количество, то дальше в другой массив. Как то так)))
    В общем, вот сам массив. После цикла получаю массивы с четными числами. Дальше хочу через count подсчитать и закинуть в нужный новый массив. Загвоздка в том, что на выходе получаю
    Array
    (
    [0] => 2
    [1] => 4
    [2] => 6
    [3] => 8
    [4] => 12
    )
    Array
    (
    [0] => 10
    [1] => 18
    [2] => 14
    [3] => 16
    )

    А мне нужно
    Array
    (
    [0] => Array
    (
    [0] => 2
    [1] => 4
    [2] => 6
    [3] => 8
    [4] => 12
    [5] => 14
    )

    [1] => Array
    (
    [0] => 3
    [1] => 10
    [2] => 18
    [3] => 14
    [4] => 16
    [5] => 18
    )

    Пробую array_merge, но все равно результат не меняется(. Заранее благодарен, что натолкнете в какую сторону копать. Вот начало)

    PHP:
    1. $numbers = [
    2. [2,4,6,8,12,14],
    3. [3,10,18,14,16,18],
    4. [8,10,13,14,16,19],
    5. ];
    6. foreach($numbers as $value){
    7. $result = [];
    8. $x = [];
    9. for($i = 0; $i < 5; $i++)
    10. {
    11. if($value[$i] % 2 == 0)
    12. $result[] = $value[$i];
    13. }
    14. $x = array_merge($x, $result);
    15. print_r($x);
    16. }
     
    #1 sliderodessa, 13 сен 2020
    Последнее редактирование: 13 сен 2020
  2. VaneS

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

    С нами с:
    16 ноя 2011
    Сообщения:
    623
    Симпатии:
    3
    Адрес:
    Россия
    А в массиве второго уровня могут быть еще массивы? Сколько вложений короче может быть?
     
  3. VaneS

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

    С нами с:
    16 ноя 2011
    Сообщения:
    623
    Симпатии:
    3
    Адрес:
    Россия
    Если я Вас правильно понял:
    PHP:
    1. $arrIn = [
    2. [2,4,6,8,12,14],
    3. [3,10,18,14,16,18],
    4. [8,10,13,14,16,19],
    5. ];
    6.  
    7. // https://incode.pro/php/sozdaem-odnomernyj-massiv-iz-mnogomernogo.html
    8. function makeSingleArray($arr){
    9.   if(!is_array($arr)) return false;
    10.   $tmp = array();
    11.   foreach($arr as $val){
    12.     if(is_array($val)){
    13.       $tmp = array_merge($tmp, makeSingleArray($val));
    14.     } else {
    15.       $tmp[] = $val;
    16.     }
    17.   }
    18.   return $tmp;
    19. }
    20. $arrOut = makeSingleArray($arrIn);
    21. $result = array(array(),array());
    22.  
    23. foreach($arrOut as $val){
    24.     $result[($val % 2 == 0 ? 0 : 1)][] = $val;
    25. }
    26. print_r($result);