2013-10-25 44 views
0

一直工作4個小時。我的眼睛開始受傷,而我的大腦因悖論而疲憊不堪。通過多個陣列進行迭代並分配位置

所以這裏是設置。 3個數組:

  • 是廣告樁的陣列

  • 正常帖

  • 採取位置的陣列,其從陣列1

拉出的陣列廣告數組具有預定義的廣告位。

我已經合併了2個陣列,因爲廣告基本上集成到正常的帖子流中。我甚至能夠根據帖子的自然順序和廣告的指定位置爲每個帖子分配一個位置。所以如果一個帖子的自然景點中有一個廣告,那麼這個帖子的位置就需要向前推進一個。如果流中只有1個廣告,這很容易。但是這個東西是爲任意數量的多個廣告設置的。

所以這裏是我如何碰撞陣列中每個非廣告元素的位置。我可以再次運行這個幾次我認爲,這應該包括當有額外的廣告,但它似乎是錯誤的和不聖潔的。

想知道是否有人能解決這個問題,因爲我厭倦了我自己的眼淚。

if(in_array($newarray[$key]['position'],$taken)){ 

$newkey = ($newarray[$key]['position'] + 1); 
$newarray[$key]['position'] = $newkey; 
$taken[] = $newkey; 

最後,我需要一個正確分配和唯一的所有位置的合併數組。

+0

與陣列數據和期望的結果的一些實例,將不勝感激。 –

回答

1

您可以編寫一個遞歸函數來提取下一個可用的位置編號,但是如果您使用的是少量的文章+廣告,則下面的內容會很快且容易。請注意,這假定您需要保留廣告和帖子數組的原始鍵。如果你不需要那樣做,那麼你可以進一步簡化它。

// Sample array of ads 
$ads = array('ad1' => array('position' => 1), 
      'ad2' => array('position' => 4), 
      'ad3' => array('position' => 6), 
      'ad4' => array('position' => 10)); 
// Identify ad positions 
foreach ($ads as $k => $v) { 
    $adPositions[$v['position']] = $v['position']; 
} 
// Identify available positions 
$availablePositions = array_combine(range(1,100), range(1,100)); 
$availablePositions = array_diff_key($availablePositions, $adPositions); 
// Sample posts 
$posts = array('post1' => array('position' => false), 
       'post2' => array('position' => false), 
       'post3' => array('position' => false), 
       'post4' => array('position' => false), 
       'post5' => array('position' => false), 
       'post6' => array('position' => false)); 
// Use first (lowest number) available position as post position 
foreach ($posts as $k => $v) { 
    $posts[$k]['position'] = array_shift($availablePositions); 
} 
// Merge arrays 
$merged = array_merge($ads, $posts); 
// Create list of positions for use with array_multisort 
foreach ($merged as $k => $v) { 
    $position[$k] = $v['position']; 
} 
// Sort $merged by ['position'] 
array_multisort($position, SORT_ASC, $merged); 

使你:

Array 
(
    [ad1] => Array 
     (
      [position] => 1 
     ) 

    [post1] => Array 
     (
      [position] => 2 
     ) 

    [post2] => Array 
     (
      [position] => 3 
     ) 

    [ad2] => Array 
     (
      [position] => 4 
     ) 

    [post3] => Array 
     (
      [position] => 5 
     ) 

    [ad3] => Array 
     (
      [position] => 6 
     ) 

    [post4] => Array 
     (
      [position] => 7 
     ) 

    [post5] => Array 
     (
      [position] => 8 
     ) 

    [post6] => Array 
     (
      [position] => 9 
     ) 

    [ad4] => Array 
     (
      [position] => 10 
     ) 

) 
+0

非常感謝!我不知道爲什麼,但是從未發過你的答案通知。我會試試這個。 – stueynet