Intereting Posts
Сброс соединения с помощью peer: mod_fcgid: ошибка чтения данных с сервера FastCGI Как загрузить изображение из приложения Android на веб-сервер в определенную папку PHP – формат даты / времени Ошибка PHPMailer с вызовом неопределенного метода PHPMailer :: SetFrom () Как преобразовать единый массив в многомерный массив в PHP? ограничить доступ к файлам изображений для зарегистрированных пользователей только в php Получение двух переменных в URL-адресе с помощью htaccess Создание данных JSON с использованием PHP и его анализ с помощью jQuery Почему это возвращает идентификатор ресурса №2? Манипулировать строку URL, добавляя параметры GET что такое «php: // input»? В основном это наблюдается в webservice Как получить общее количество столбцов, если строки разбиты на страницы? Компонент One to One Chat с (PHP MySQL) Как передать переменные на странице PHP на другую страницу без использования формы? Выбор одной строки в MySQL

Объедините два массива бок о бок, где один может быть короче другого

Скажем, у меня горячие и новые новостные статьи. Я хочу показать их бок о бок в представлении. Конечно, может быть, что новостей больше, чем новых новостей (например, утром) и наоборот. Это приведет к неравномерности длины столбцов.

Вот почему я строю два массива. Один с горячими новостями и один с новыми.

$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 )