【问题标题】:push 1 element from one array to another将 1 个元素从一个数组推送到另一个数组
【发布时间】:2017-11-06 09:16:18
【问题描述】:

我知道这是可能的,但不确定我的情况。所以目前我有 2 个数组。一个用于广告,另一个用于事件。我想为每 3 个事件添加一个广告。简单解释一下它们目前的情况。

事件数组:

$Events =Array('Event 1','Event 2','Event 3','Event 4','Event 5','Event 6','Event 7') ;

广告数组:

$Adverts =Array('Advert 1','Advert 2');

目标数组:

$Target = Array('Event 1','Event 2','Event 3','Advert 1','Event 4','Event 5','Event 6','Advert 2');

我目前对事件数组进行了分块,以便它们以 3 个为一组。

【问题讨论】:

  • 好的,我们理解了问题所在。现在告诉我们,你试过什么?比如,循环或任何数组函数???
  • 有无数种方法可以实现这个简单的目标。你试过什么?
  • 简单的地图和 foreach 循环,哈哈,我没有使用过 php,所以我可能没有充分利用这两种方法

标签: php arrays loops sorting


【解决方案1】:

您正在寻找 array_splice 。

这应该可行。

 $event_array = ['Event 1','Event 2','Event 3','Event 4','Event 5','Event 6','Event 7'];
$advert_array = ['Advert 1','Advert 2'];
//Push array value;
array_splice($event_array, 3, 0,array($advert_array[0]));
//Add to index 3
array_splice($event_array, 3, 0,$advert_array[0]);
print_r($event_array);

结果

Array ( [0] => Event 1 [1] => Event 2 [2] => Event 3 [3] => Advert 1 [4] => Event 4 [5] => Event 5 [6] => Event 6 [7] => Advert 2 )

【讨论】:

  • 字段 5 输出错误
  • 完成谢谢 :)
  • 这吐出来了.. E,E,E,A,A,E,E,E 而不是 E,E,E,A,E,E,E,A。非常接近,我可能会玩它谢谢。
【解决方案2】:

你可以试试这个:

$Events =array('Event 1','Event 2','Event 3','Event 4','Event 5','Event 6','Event 7') ;
$Adverts =array('Advert 1','Advert 2');
$Target =array();

$AdvertCount = 0;
foreach ($Events as $key => $Event) {
    array_push($Target,$Event);
    if (($key + 1) % 3 == 0) {
        array_push($Target,$Adverts[$AdvertCount]);
        $AdvertCount++;
    }
}

print_r($Target);

【讨论】:

    【解决方案3】:

    最简单的方法之一是遍历$Adverts 并为$Adverts 的每个项目从$Events 中提取三个项目:

    $Events = array('Event 1','Event 2','Event 3','Event 4','Event 5','Event 6','Event 7');
    $Adverts = array('Advert 1','Advert 2');
    
    $Target = array();
    // The current position in $Events
    $i = 0;
    foreach ($Adverts as $advert) {
        // Append 3 events and the current advert
        $Target = array_merge($Target, array_slice($Events, $i, 3), array($advert));
        // Skip over the 3 events just processed
        $i += 3;
    }
    

    为确保您不会用完事件,您应该首先计算迭代次数。下面的代码只放入了$Target 3 个事件 + 1 个广告的完整组。

    // The number of events in each group
    $nbEvents = 3;
    // The number of groups; each group contains $nbEvents events + 1 advert
    $nbGroups = min((int)(count($Events)/$nbEvents), count($Adverts));
    
    $Target = array();
    // Iterate over $Adverts but process only $nbGroups items
    for ($i = 0; $i < $nbGroups; $i ++) {
        // Append $nbEvents events and the current advert
        $Target = array_merge(
            $Target,
            array_slice($Events, $nbEvents * $i, $nbEvents),
            array($Adverts[$i])
        );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-04
      • 2020-08-23
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多