Всем привет. Если, что, начинающий. Есть задача пройтись по многомерному массиву и проверить наличие четных чисел в каждом подмассиве. Если четных 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: $numbers = [ [2,4,6,8,12,14], [3,10,18,14,16,18], [8,10,13,14,16,19], ]; foreach($numbers as $value){ $result = []; $x = []; for($i = 0; $i < 5; $i++) { if($value[$i] % 2 == 0) $result[] = $value[$i]; } $x = array_merge($x, $result); print_r($x); }
Если я Вас правильно понял: PHP: $arrIn = [ [2,4,6,8,12,14], [3,10,18,14,16,18], [8,10,13,14,16,19], ]; // https://incode.pro/php/sozdaem-odnomernyj-massiv-iz-mnogomernogo.html function makeSingleArray($arr){ if(!is_array($arr)) return false; $tmp = array(); foreach($arr as $val){ if(is_array($val)){ $tmp = array_merge($tmp, makeSingleArray($val)); } else { $tmp[] = $val; } } return $tmp; } $arrOut = makeSingleArray($arrIn); $result = array(array(),array()); foreach($arrOut as $val){ $result[($val % 2 == 0 ? 0 : 1)][] = $val; } print_r($result);