11

私はフォームの配列を持っています

$array = array(1 => 'a',
               2 => 'b',
               3 => 'c',
               4 => 'd')

2 と 3 の間に「穴」を作成したい、つまり次の配列を取得したい

$array = array(1 => 'a',
               2 => 'b',
               4 => 'c',
               5 => 'd')

これを行うための最良の方法は何だと思いますか?

4

6 に答える 6

4

これはうまくいくはずです:

function array_drill_hole($input, $start, $end) {
    array_splice($input, $start, $end - $start, null);
    return $input;
}
于 2013-11-08T14:51:42.227 に答える
2
$array = array_combine(array_merge(range(1, 2), range(4, 5)), $array);
于 2013-11-08T14:48:55.910 に答える
1
define("N", 3);

$i = count($array);
while ($i >= N) {
   $array[$i+1] = $array[$i];
   $i--;
}
unset ($array[ N ]);

または同等バージョン

define("N", 3);

for($i=count($array) ; $i >= N ; $i--) {
   $array[$i+1] = $array[$i];
}
unset ($array[ N ]);
于 2013-11-08T14:46:04.970 に答える
0
$array = array(1 => 'a',
               2 => 'b',
               3 => 'c',
               4 => 'd');
array_splice($array, 2, 0, " ");
array_splice($array, 3, 0, " ");
unset($array[3]);
unset($array[2]);

var_dump($array);

出力:

array(4) { [0]=> string(1) "a" [1]=> string(1) "b" [4]=> string(1) "c" [5]=> string(1) "d" } 
于 2013-11-08T15:01:28.230 に答える
0

テスト済みの完全なソリューションは次のとおりです。

function makeHole($index,$holeArr) {
            $returnArr = array();
            $increaseFlag = false;
            foreach ($holeArr as $ind => $val) {
                if ($ind == $index || $increaseFlag) {
                    $increaseFlag = true;
                    $returnArr[$ind+1] = $val;
                } else {
                    $returnArr[$ind] = $val;
                }
            }
            return $returnArr;
        }

        $array = array(1 => 'a',
            2 => 'b',
            3 => 'c',
            4 => 'd');
        $result = makeHole(3,$array);
        echo '<pre>';
        print_r($result);
        echo '</pre>';
于 2013-11-08T14:58:00.263 に答える
0

参加したい: http://codepad.org/9JDGHxhK

array_splice($array, 2, 0, "");

return array_filter($array);
于 2013-11-08T14:57:06.260 に答える