【PHP7.1以降】1行で配列の値の前後を入れ替える


背景

Vue.jsで、配列に入ったdata要素を前後でスワップする機能を作成しようと思ったのですが、
reactiveに画面に反映できず、バックエンドで簡単に処理するにはどうしよう?と思い調べてみました。

追記:2020/04/25 ご指摘いただいたので、コードに修正を加えています

コード

example.php
<?php

$array = ['a','b', 'c', 'd', 'e'];
swapValues($array, 2);
var_dump($array);

function swapValues(array &$array, int $key): void
{
    [$array[$key], $array[$key + 1]] = [$array[$key + 1], $array[$key]];
}

よくある書き方として、$tmpなどの配列の値を一時保存するコードはよく見るのですが、
これだと直感的に見てもわかりやすくないですか?

takeaways

これはphp7.1から追加された、「対称的な配列の分解(Symmetric Array Destructuring)」 と呼ばれるシンタックスですね。

配列の短縮構文 ([]) を使って、 代入用に配列の値を取り出せるようになりました (foreach でも使えます)。 これは、list() の代替として使えます (list() もまだ使えます)。

参照:https://www.php.net/manual/ja/migration71.new-features.php