PHPの配列の要素をコピーする方法って?

配列をコピーして別の配列を作る方法は無いか?

そんな質問を頂き知らなかったので検索しました。

けど便利な関数は無さそうですね。

 

単純に

のように書いたんじゃダメでしょうか?

この場合$ayr2の値を変更したりすると$ary1の値はどうなるのか?

実験してみました。

PHPの配列の要素をコピーしたら元の配列の影響は?

配列をコピーして、コピーした配列の値を変更した場合、コピー元の配列の値はどうなるのか?

実験してみました。

結果は次のようになりました。

1個目の配列がコピー元で、2個目の配列がコピー先ですね。

結果は、コピー元には影響しないですね。

 

PHPには値渡し参照渡しというものがあります。

 

値渡しというのはここで言うコピーです。

コピーした先で値を変更しても、コピー元には影響しません。

 

参照渡しというのは、メモリに確保した値に対し、住所だけを渡すイメージです。

誰が見るかが違うだけで、参照する値は同じものになります。

この場合コピー先($ary2)で値を変更した場合も、コピー元($ary1)の値が変更されます。

やってみましょう。

2行目の $ary1 の前に & がついています。

これが参照渡しをするときの書き方です。

結果は次のようになります。

1個目の配列がコピー元で、2個目の配列がコピー先ですが、配列のインデックス=4の値がどちらも同じ値になっています。

配列の一部の要素だけコピーはできる?

これに関しても結局便利な関数はありません。

(僕が知らないだけであるかもしれません。そのときは教えてください。)

 

例えば上のような配列があったときに、大阪だけを抜き出して新しい配列にしたいとします。

その場合は以下のように foreach などを使って新しい配列を作成する感じですね。

結果は次のようになります。

1個目の配列がコピー元で2個目の配列がコピー先です。

大阪だけ抜き出して新しい配列を作成できました。

どうですか?

まとめ

配列のコピー??って感じでした。

まあ一般的な処理ですね。

使い方によって値渡しと参照渡しがあります。分からなければ値渡しで大丈夫です。

配列の一部を抜き出す処理もよくありますが、ここで紹介した方法以外にもループの中でif文で判定する方法などがあります。

ただ、便利なものはなかなか無いですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA