2011-06-09 48 views
2

數組$ A的所有值都是相同長度的字符串。將元素插入數組的順序位置?

$A = Array 
(
    [0] => 03 
    [1] => 04 
    [2] => 05 
    [3] => 06 
    // [4] => 07 // "07" before "04" position 
    [4] => 04 
    [5] => 05 
    [6] => 06 
    // [8] => 07 // "07" before "08" position 
    [7] => 08 
    [8] => 03 
    [9] => 04 
    [10] => 05 
    [11] => 06 
    [12] => 07 // it is existing 
    [13] => 08 
) ; 

我想將 「07」 元素,如果it is not existing 「04」 或從位置 「08」 position.start 1

所以這將是改變

$A = Array 
(
    [0] => 03 
    [1] => 04 
    [2] => 05 
    [3] => 06 
    [4] => 07 // just appended 
    [5] => 04 
    [6] => 05 
    [7] => 06 
    [8] => 07 // just append 
    [9] => 08 
    [10] => 03 
    [11] => 04 
    [12] => 05 
    [13] => 06 
    [14] => 07 
    [15] => 08 
) ; 

任何人前後知道如何做到這一點,請幫助我嗎?

+1

「附加」意味着_insert在end_。你在更廣泛地討論_插入_ – 2011-06-09 15:36:04

+0

是的。你是對的, – newbie 2011-06-09 15:38:03

+0

@Tomalak我相信他一般都在談論家庭作業...... – Frankie 2011-06-09 15:38:28

回答

2

不是最漂亮的解決方案,但應該做的工作:

$b = array(); 
for($i=0;$i<count($A);$i++){ 
    $b[] = $A[$i]; 
    if(($i<count($A) - 1) && ($A[$i+1]<$A[$i] || ($A[$i+1] == '08')) && $A[$i] < '07') 
     $b[] = '07'; 
} 
var_dump($b); 
+0

THANS,您的狀態if(($ i newbie 2011-06-10 07:48:19

3

會有「漂亮」的方式來做到這一點,但正如預期......

  1. 遍歷數組
  2. 如果當前值等於7減1,您將在那裏插入一個新值
  3. 創建一個函數「insert_into_array」:
    a)將您的兩個陣列(看array_chunk
    b)中的持久性有機污染物元件到第一陣列的端部(array_pop
    c)中合併的兩個陣列背部(array_merge

我已經從棄權編寫任何代碼,因爲這可能是家庭作業和編寫代碼,即使你不是真的深思這個問題會推動你通過考試很長的路...

0

首先,找到你的數組中的空白,那就是06但不是以下的位置07

$positions = array(); 
foreach ($A as $k => $v) { 
    if (isset($last) && $last != $v - 1 && $last == '06') { 
     $positions[] = $k; 
    } 
    $last = $v; 
} 

然後,將它們插入:

$count = 0; 
foreach ($positions as $pos) { 
    array_splice($A, $pos + ($count++), 0, '07'); 
} 

就是這樣。

0
//make sure the array is numeric: 
$A = array_values($A); 
foreach(array('04','08') as $search){ 
    $positions = array_keys($A,$search); 
    rsort($positions); 
    foreach($positions as $key){ 
     if($key==0 || $A[$key-1] != '07'){ 
      array_splice($A,$key,0,'O7'); 
     } 
    } 
} 
0

在2017年,我已經找到了2個漂亮的方法是nette\utils包的一部分。

他們做的工作完美!

只要運行:

composer require nette/utils 

,並使用Arrays類或在他們的代碼啓發。