Скажем, у меня горячие и новые новостные статьи. Я хочу показать их бок о бок в представлении. Конечно, может быть, что новостей больше, чем новых новостей (например, утром) и наоборот. Это приведет к неравномерности длины столбцов.
Вот почему я строю два массива. Один с горячими новостями и один с новыми.
$hot = array( 'hotObj 1', 'hotObj 2', 'hotObj 3', 'hotObj 4', ); $new = array( 'newObj 1', 'newObj 2', );
В результате я хочу:
$hot = array( 'hotObj 1', 'newObj 1', 'hotObj 2', 'newObj 2', 'hotObj 3', 'hotObj 4', );
Как я могу это достичь? Не имеет значения, какой массив длиннее. array_merge () просто положил бы второй массив в конец, который не то, что я хочу.
Вы можете добиться этого просто используя цикл for
, не используя функцию sort
или array_merge
например, как
$count = (count($hot) > count($new)) ? count($hot) : count($new); $result = []; for($i= 0; $i < $count;$i++){ if(isset($hot[$i])){ $result[] = $hot[$i]; } if(isset($new[$i])){ $result[] = $new[$i]; } } print_r($result);
Вывод:
Array ( [0] => hotObj 1 [1] => newObj 1 [2] => hotObj 2 [3] => newObj 2 [4] => hotObj 3 [5] => hotObj 4 )
демонстрация
Имейте петлю для суммы обоих массивов и вставьте ее по мере необходимости. Попробуйте следовать (работает) –
$hcount=count($hot); $ncount=count($new); $max=$hcount+$ncount; $result=array(); $i=0; $j=0; $k=0; while($i<=$max) { if($i%2==1 && $j<$ncount) { $t=$new[$j++]; } else { if($k<$hcount) $t=$hot[$k++]; } $result[$i]=$t; $i++; } print_r($result);
в$hcount=count($hot); $ncount=count($new); $max=$hcount+$ncount; $result=array(); $i=0; $j=0; $k=0; while($i<=$max) { if($i%2==1 && $j<$ncount) { $t=$new[$j++]; } else { if($k<$hcount) $t=$hot[$k++]; } $result[$i]=$t; $i++; } print_r($result);
вывод
Array ( [0] => hotObj 1 [1] => newObj 1 [2] => hotObj 2 [3] => newObj 2 [4] => hotObj 3 [5] => hotObj 4 [6] => hotObj 4 )