数组$ 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
有人知道怎么做,请帮帮我吗?
答案 0 :(得分:3)
有更“漂亮”的方法可以做到这一点,但是,正如预期的那样......
我已经弃绝了编写任何代码,因为这可能是家庭作业,编写代码,即使你没有深入思考这个问题会让你在通过考试方面走得很远......
答案 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
课程或激励他们的代码。