Спасибо то что нужно!
Мне трудно понять вашу логику и массив у вас получается трехмерный.
Я пока остановился на такой логике
$tmp = 0;$newArr = [];for($i=0;$i<317;$i++){ if(!in_array(1, $tempArr[$i])) { //добавляем первый подмассив, или если после цепочки единиц начались нули $tmp еще не перезатерлась и скажет нам об этом if(count($newArr)==0 || $tmp == 1){ array_push($newArr, $tempArr[$i]); } if($tmp == 0 && count($newArr)!==1 ) { $newArr = array_merge($newArr[count($newArr)-1], $tempArr[$i]); } $tmp = 0; } else { if($tmp == 0){ //пушим новый подмассив с единицами, если он пошел после цепочки нулей $tmp еще не перезатерлась и скажет нам об этом array_push($newArr, $tempArr[$i]); } if($tmp == 1){ $newArr = array_merge($newArr[count($newArr)-1], $tempArr[$i]); } $tmp = 1; }}
Первую итерацию отрабатывает, потом сыпятся ошибки, пытаюсь понять что не так. Ругается что у меня там не массивы, но они ж массивы мля
Мне не нужно два подмассива, мне нужны меньшие блоки, см. выше, расписал подробнее.
Исходный массив двухуровневый, нет подмассивов 3-ого уровня.
$oldArray похож - в каждом подмассиве 50 значений (либо одни нули, либо 1 и 0).
Ваш код в итоге собрал мне два огромных подмассива, в первом только нули во втором нули + единицы.
В $oldArray подряд идут только подмассивы нулей, а когда начинаются подмассивы с единицами, то они тоже идут несколько раз подряд, потом опять начинаются только нули.
Вот мне и нужно как бы разрезать старый массив на блоки (подмассивы) где 1+0
Было$oldArray = [ 0=>{0,0,0 ...одни нули}, 1=>{0,0,0 ...одни нули}, 2=>{0,0,0 ...одни нули}, 3=>{0,0,0 ...одни нули}, 4=>{0,0,1 ...есть единица}, 5=>{0,1,0 ...есть единица}, 6=>{1,0,0 ...есть единица}, 7=>{0,0,0 ...одни нули}, 8=>{0,0,0 ...одни нули},9=>{0,0,1 ...есть единица}, 10=>{0,1,0 ...есть единица}, 11=>{1,1,0 ...есть единица}, ] стало $newArray = [ 0=>{0,0,0 ...одни нули (склеиваем подмассивы с 0 по 3)}, 1=>{1,0,1 ...есть единица (склеили подмассивы с 4 по 6}, 2=>{0,0,0 ...одни нули (склеиваем подмассивы с 7 по 8)},3=>{0,1,1 ...есть единица (склеили подмассивы с 9 по 11}, ]
Надо в санаторий😅
Спасибо, но видать реально надо ))) Финальный то вариант какой (весь код)?
В последнем блоке у вас не опреден массив $new_a, а я за вашей логикой что-то не поспеваю...
А ну да, ну да. Был невнимателен. Прошу понять и простить
Спасибо за помощь - все равно не то.
Вот начало полученного массива, он трехуровневый
array(2) { [0]=> array(81) { [2]=> array(51) { [0]=> int(2) [1]=> int(0) [2]=> int(0) [3]=> int(0) ..... и его конец .... } [312]=> array(51) { [0]=> int(312) [1]=> int(0) [2]=> int(0)
} [312]=> array(51) { [0]=> int(312) [1]=> int(0) [2]=> int(0)
Каждый подмассив 3-го уровня длинной 50 (как и у исходного). + непонятно растущий первый элемент каждого подмассива (зачеркнул), он увеличивается
А нужен массив 2-х уровневый который по идее (в результате склейки) будет иметь подмассивы разной длинны.
Может ошибся где?
$tmp = 0; $new_a = []; for($i=0;$i<317;$i++){ if(!in_array(1, $tempArr[$i])) { if($tmp[0]===0) { #значит предыдущий - только нули $new_a[0][$tmp[1]] = $tempArr[$tmp[1]]; #чтобы учесть предыдущий, если он учтен, то будет просто переписан $new_a[0][$i] = $tempArr[$i]; } $tmp = [0, $i]; #первый элемент 0 если только нули, второй ссылка на индекс элемента #если нужен #$new_a[3][$i] = $oldArray[$i]; } else { if($tmp[0]===1) { $new_a[1][$tmp[1]] = $tempArr[$tmp[1]]; $new_a[1][$i] = $tempArr[$i]; } $tmp = [1, $i]; } }
вот это не понял
if($tmp[0]===0)
какой индекс - это же переменная, не массив?
Спасибо, переписал так
$tmp = 0; $prevtmp=2; $newArr = [];for($i=0;$i<317;$i++){ if (in_array(1,$tempArr[$i]) ) { $tmp=1; } else { $tmp=0 ; } if ($tmp!=$prevtmp) { $newArr = $tempArr[$i]; $prevtmp = $tmp; } else { array_merge ($tempArr[$i],$newArr[count($newArr)-1]); }}
В итоге получил массив и 317 подмассивов. Или я ошибся или логика неверная.
Как тогда понять эти данные из доков (пусть и к 5 версии), https://laravel.ru/docs/v5/blade#отображение-5
Вместо написания тернарного оператора Blade позволяет вам использовать такое удобное сокращение, которое будет скомпилировано в тернарный оператор, приведённый ранее:
{{ $name or 'Default' }}
Если переменная $name имеет значение, то оно будет отображено, иначе будет выведено слово Default .