2011-06-09 50 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类或在他们的代码启发。