配列の内部ポインタを任意の数まで進めたい
という質問を大分昔に後輩からもらった事があるんですが、その頃は配列に「内部ポインタ」なるものがあるのを知りませんでしたし使ったこともありませんでした。
http://jp2.php.net/manual/ja/function.next.php
聞いてみると「next」とかでポインタを一つずつ移動して、値を処理をしていけるらしいんですが、どうやら彼は「任意の数」まで一気にポインタを進めて、そこから処理を始めたかったらしいんです。
1. じゃあ処理が始まる前に、任意の回数next呼んだら。。。
<?php //対象の配列はこんな感じだとしよう //6番目から処理を開始したい $hoge = array( 'key1'=>'value1', 'key2'=>'value2', 'key3'=>'value3', 'key4'=>'value4', 'key5'=>'value5', 'key6'=>'value6', 'key7'=>'value7', 'key8'=>'value8', 'key9'=>'value9', 'key10'=>'value10', ); //6番目までポインタをすすめる。 for($i=0; $i<5; $i++){next($hoge);} //6番目から処理 while(list($k,$v) = each($hoge)){ echo $k.'=>'.$v."\n"; }
後輩:それがダサいから聞いてるんですよ。
俺:うっ。。うん。。。ごめ。。
2. じゃあさっきのfor文を関数化。。。
後輩:それも気持ち悪いんですよね。そもそもそんなの組み込みでありそうなんですが?
俺:あっ。。うん。。。ですよねー。。。(やだ!もしかしてこれが教えてクン?)
3. ちゃちゃっと二人で調べた結果。。。どうやらそんな便利なものはなさそうでした。。。orz
という訳で(メンドクサイので)「array_splice」でやらないか?
<?php //6番目から処理を開始したい $hoge = array( 'key1'=>'value1', 'key2'=>'value2', 'key3'=>'value3', 'key4'=>'value4', 'key5'=>'value5', 'key6'=>'value6', 'key7'=>'value7', 'key8'=>'value8', 'key9'=>'value9', 'key10'=>'value10', ); $hoge2 = array_splice($hoge, 5); while(list($k,$v) = each($hoge2)){ echo $k.'=>'.$v."\n"; }
後輩:そっすねー。まぁこの辺でいいかと思いますー。
俺:あっ。。。ありがとうござまーす!
「任意の数だけポインタを一気に進める」という本質は完全に見失ってるが、後輩様が納得してくれて良かったと思ったワン。