【问题标题】:Merge two arrays side by side where one can be shorter than the other并排合并两个数组,其中一个可以比另一个短
【发布时间】:2015-12-31 13:21:01
【问题描述】:

假设我有热门和新的新闻文章。我想在视图中并排显示它们。当然,热点新闻可能比新新闻多(例如早上),反之亦然。这会导致列的长度不均匀。

这就是我构建两个数组的原因。一个是热点新闻,一个是新消息。

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

【问题讨论】:

  • 您的新闻条目没有ID吗?如果是这样,只需使用帖子 ID 索引数组即可。
  • 我认为这无济于事。由于新文章的 ID 最高,它们总是在最后。但我希望它们与热门的并排。事实上,array_merge 的作用是一样的。它只会把新文章放在最后。

标签: php arrays sorting merge


【解决方案1】:

对两个数组的总和有一个循环,并根据需要插入它。 尝试关注(工作)-

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

【讨论】:

  • 您好,非常感谢您的回答。我的想法也和你一样有点复杂。好吧,看看另一个答案有多简单:)
  • 是的 @sleepless ,感谢 Uchiha 和 stackoverflow ,你是对的,congo 为你 .. 完成了一个很好的解决方案。快乐编码:)
【解决方案2】:

您可以简单地使用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

【讨论】:

  • 谢谢 - 有时它可以如此简单。但问题是,只有当我的热门产品比新产品多时,这才有效。
  • 是的,可能是这样
  • 也许只计算两者并循环遍历更大的数组。可行,但不知道这是否是最佳解决方案。
  • 查看更新后的答案无需关心哪个更大
  • 完美。这确实是一个非常棒的解决方案。谢谢!
猜你喜欢
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-26
  • 2020-09-12
  • 2017-04-07
  • 1970-01-01
相关资源
最近更新 更多