多次元配列の要素をスワップアップし、その上に兄弟があります。
配列内で選択されたインデックスを持つ要素が、その位置を彼の上の要素と交換するようにします。
- その位置(N)から位置(N-1)に移動する要素
- 位置(N-1)の要素を位置(N)に配置したいのですが、
- 結果のインデックスは、配列内の新しい順序を正しく反映している必要があります。
array_values($tmparr);
インデックスを正しくソートしますか - スワップアップするターゲット要素はPosition(0)に移動できますが、Position(0)から開始することはありません。
- Position(0)にある場合にスワップダウンする要素は、配列の最後に移動するのではなく、position(1)に移動する必要があります。
この関数は私がやりたいことを意味的に説明していますが、まったく機能しません。
function swaparray($tmparr,$posa,$posb){
$vala = $tmparr[$posa];
$valb = $tmparr[$posb];
$tmparr[$posa] = $valb;
$tmparr[$posb] = $vala;
return $tmparr; }
2番目の関数は目的のターゲットを上にシフトしますが、上記の要素は上に押し上げられ、位置0にある場合はリストの最後に移動します。ターゲットの下に移動しないため、意図したとおりに機能しません。
function swaparray($tmparr,$posa,$posb){
$vala = $tmparr[$posa];
$valb = $tmparr[$posb];
unset($tmparr[$posa]);
unset($tmparr[$posb]);
$tmparr[$posa] = $valb;
$tmparr[$posb] = $vala;
$tmparr = array_values($tmparr);
return $tmparr;
}
私の問題についてさらに読むと、seams Array_splice()でうまくいく可能性があります。これについてのあなたの意見は何ですか?
回答の編集:(PHP> = 4.3.8)
Array_splice()を使用した実用的なソリューション
function swaparray($array, $n) {
// taking out at $n
$out = array_splice($array, $n, 1);
// adding in at $n - 1
array_splice($array, $n - 1, 0, $out);
return $array;
}
これが元の多次元配列です
Array ( [0] => Array ( [key1] => 1 [key2] => 1 [key3] => 1 [key4] => 1 )
[1] => Array ( [key1] => 2 [key2] => 2 [key3] => 2 [key4] => 2 )
[2] => Array ( [key1] => 3 [key2] => 3 [key3] => 3 [key4] => 3 )
[3] => Array ( [key1] => 4 [key2] => 4 [key3] => 4 [key4] => 4 ) )
これが私がやりたかったことの抜粋/例です。
[0] key1=1 key2=1 key3=1 key4=1
[1] key1=2 key2=2 key3=2 key4=2
[2] key1=3 key2=3 key3=3 key4=3 <-
[3] key1=4 key2=4 key3=4 key4=4
swaparray($ tmparr、2);
[0] key1=1 key2=1 key3=1 key4=1
[1] key1=3 key2=3 key3=3 key4=3 <-
[2] key1=2 key2=2 key3=2 key4=2
[3] key1=4 key2=4 key3=4 key4=4
swaparray($ tmparr、1);
[0] key1=3 key2=3 key3=3 key4=3 <-
[1] key1=1 key2=1 key3=1 key4=1
[2] key1=2 key2=2 key3=2 key4=2
[3] key1=4 key2=4 key3=4 key4=4
swaparray($ tmparr、1);
[0] key1=1 key2=1 key3=1 key4=1 <-
[1] key1=3 key2=3 key3=3 key4=3
[2] key1=2 key2=2 key3=2 key4=2
[3] key1=4 key2=4 key3=4 key4=4