并排合并两个阵列,其中一个可以比另一个短

时间:2015-10-03 11:58:36

标签: php arrays sorting merge

说我有新的热门新闻。我想在视图中并排显示它们。当然可能是有更多热门新闻而不是新闻(例如早上),反之亦然。这会导致柱子长度不均匀。

这就是为什么我要构建两个数组的原因。一个是热门新闻,另一个是新闻。

$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()只会把第二个数组放在最后,这不是我想要的。

2 个答案:

答案 0 :(得分:3)

您只需使用for循环就可以实现它,而无需使用sortarray_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
)

Demo

答案 1 :(得分:0)

有两个数组之和的循环并根据需要插入它。 尝试以下(工作) -

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