Hatena::ブログ(Diary)

Memo

2008-04-29

[] 配列の先頭と最後の取得方法

クラスのメンバ変数に配列があるとして、その配列の先頭と最後の要素をそれぞれ取得したかった。

先頭と最終を取り出す標準関数があったな・・と思い、

<?php
// $this->_array は array('hoge', 'foo', 'bar') とあるとする
$first = array_shift($this->_array);
$last = array_pop($this->_array);

とやって、コードを実行したら、意図した通りに動かなかった。

で、よくよく配列の中身をダンプしたら、array('foo') のみになってた。

# 配列の中身を後で使いたかった。

ちゃんとマニュアル読んだら、「要素分ひとつ短くなる」と書いてあった・・・orz

PHP: array_shift - Manual

PHP: array_pop - Manual


配列の中身を残したまま、先頭と、最後の要素を取得するにはどうしたら効率が良いのだろう。

とりあえず、

<?php
reset($this->_array);
$first = current($this->_array);
$last = end($this->_array);
reset($this->_array);

ってしたら、意図通り取れたけど、もっと効率の良いやり方があるのかな。

ご存知の方、or オレならこう書くという方、やり方教えて下さい。<(_ _)>


追記:4/30

reset() の戻り値で最初の要素が取れると教えて頂いた。

komura さん、ありがとうございます!


ということで、こんな感じになった。

<?php
$last = end($this->_array);
$first = reset($this->_array)

コードがすっきりした!

マニュアルちゃんと読めって話ですね・・・。

komurakomura 2008/04/30 00:33 reset() は配列の最初の要素を返してくれます。
http://php.net/reset

普通に以下で問題ないと思います。
$first = reset($this->_array);
$last = end($this->_array);

end() を使用すると、配列の参照ポインタが一番後ろに変更されるのが気になるのであれば、end() を先にしておくと良いと思います。
$last = end($this->_array);
$first = reset($this->_array);

heavenshellheavenshell 2008/04/30 22:15 > komura さん
おおお!教えて頂きありがとうございます!

reset() の戻り値で最初のポインタの要素が取れるんですね!
知りませんでした。。。

教えて頂いた方法でやるとかなりすっきりしますね!

通りすがり通りすがり 2013/10/25 10:54 単純に
$first = $this->_array[0];
$last = $this->_array[count($this->_array)];
ではダメでしょうか?

通りすがり通りすがり 2013/10/25 10:54 ちがった
$last = $this->_array[count($this->_array) - 1];
か。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証