キーで選択された配列要素を最初の位置に移動するには、PHPで最もエレガントな方法は何ですか?特定のキーを持つ配列項目を配列の最初の位置に移動するPHP
入力:
$arr[0]=0;
$arr[1]=1;
$arr[2]=2;
....
$arr[n]=n;
$key=10;
出力:
$arr[0]=10;
$arr[1]=0;
$arr[2]=1;
$arr[3]=2;
....
$arr[n]=n;
キーで選択された配列要素を最初の位置に移動するには、PHPで最もエレガントな方法は何ですか?特定のキーを持つ配列項目を配列の最初の位置に移動するPHP
入力:
$arr[0]=0;
$arr[1]=1;
$arr[2]=2;
....
$arr[n]=n;
$key=10;
出力:
$arr[0]=10;
$arr[1]=0;
$arr[2]=1;
$arr[3]=2;
....
$arr[n]=n;
キーを設定解除する必要はありません。例では
//appending $new in our array
array_unshift($arr, $new);
//now make it unique.
$final = array_unique($arr);
<?php
$key = 10;
$arr = array(0,1,2,3);
array_unshift($arr,$key);
var_dump($arr) //10,0,1,2,3
?>
これは選択された要素の前に追加されますが、キーでその要素を参照せず、配列の他の場所から削除します。 – octern
右、オクタンは既に言った – user965748
使用array_unshift
:このような
$new_value = $arr[n];
unset($arr[n]);
array_unshift($arr, $new_value);
これは私が前に試みたが、それは動作しませんでした – user965748
何がうまくいかなかったのですか?結果は何でしたか? –
同じ配列で、キーを変更しないかのように見えます – user965748
何かが動作するはずです。配列キーが存在するかどうかを確認し、その値を取得してからunset
とし、array_unshift
を使用してアイテムを再度作成し、先頭に配置します。この単純なコードの後
if(in_array($key, $arr)) {
$value = $arr[$key];
unset($arr[$key]);
array_unshift($arr, $value);
}
$arr[0]=0;
$arr[1]=1;
$arr[2]=2;
$arr[3]=10;
$tgt = 10;
$key = array_search($tgt, $arr);
unset($arr[$key]);
array_unshift($arr, $tgt);
// var_dump($arr);
array
0 => int 10
1 => int 0
2 => int 1
3 => int 2
$tgt = 10;
$key = array_search($tgt, $arr);
for($i=0;$i<$key;$i++)
{
$temp = $arr[$i];
$arr[$i] = $tgt;
$tgt = $temp;
}
、あなたがする必要があるすべては、再配置された配列を表示しています。 :)
古い質問とすでに答えていますが、連想配列があればarray_mergeを使用できます。任意の数値キーはarray_unshift
で再インデックス付けされることになるので
$arr = array_merge(array($key=>$arr[$key]), $arr);
驚くばかり!あなたは私の一日を救った。 – Mario
(in the docに述べたように)、それはアレイの第1の位置にあるキーでアイテムを移動する+
アレイunion演算子を使用することをお勧めします:
$item = $arr[$key];
unset($arr[$key]);
$arr = array($key => $item) + $arr;
に従うように短いそれを維持するには、単に、あなたは「キーで要素を選択」していないでください。配列の先頭に任意の値を挿入するだけです。私はこれが他の人たちを混乱させるかもしれないと思う。 – galymzhan
@galymzhan $ arr [10]は以前は10で、今度は$ arr [9] = 9から$ arr [10] = 11になります。この例ではこれを明確に説明していないことに同意します。 a) "移動"されている配列要素を表示し、b)異なる要素値を使用することで、キーとその値を混同することが難しくなります。 – octern
一時的な配列とサイクルで良い古い方法となるようです – user965748