将元素插入数组的顺序位置?

时间:2011-06-09 15:30:25

标签: php arrays

数组$ 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
) ; 

如果{04}元素位于“04”或“08”位置之前,我想插入“07”元素。从位置1开始

所以它会在改变之后

it is not existing

有人知道怎么做,请帮帮我吗?

5 个答案:

答案 0 :(得分:3)

有更“漂亮”的方法可以做到这一点,但是,正如预期的那样......

  1. 迭代数组
  2. 如果当前值等于7减去1,则会在那里插入一个新值
  3. 创建一个函数“insert_into_array”: a)将你的阵列分成两部分(见array_chunk
    b)将你的元素持久化到第一个数组的末尾(array_pop
    c)将两个数组合并(array_merge
  4. 我已经弃绝了编写任何代码,因为这可能是家庭作业,编写代码,即使你没有深入思考这个问题会让你在通过考试方面走得很远......

答案 1 :(得分: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);

答案 2 :(得分: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');
}

就是这样。

答案 3 :(得分: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');
        }
    }
}

答案 4 :(得分:0)

2017年,我发现了nette\utils包中有两种漂亮的方法。

他们做得很好!

跑步:

composer require nette/utils

并使用Arrays课程或激励他们的代码。