- ベストアンサー
【PHP】配列の最後の要素のキーを知るには
以下のような乱雑な配列があったとして中身がわからない場合、最後の要素のキーが「12」であることを知るにはどうすればいいでしょうか? お詳しい方、よろしくお願いいたします。 $myArray = array(); $myArray[2] = ''; $myArray[5] = 'a'; $myArray[9] = NULL; $myArray[12] = 'z';
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
数字の順番にしたいのであれば sort($myArray); としてから行えばよいかと。 ただしソート前の順番は失われるので前の順番があとで必要であれば配列をコピーして残しておいたほうがいいですね。
その他の回答 (4)
- i2719
- ベストアンサー率35% (11/31)
end($myArray);//最後の要素 echo key($myArray);//のキー
お礼
おお! 配列にはポインターという概念があったのですね。 ポインターを末尾に動かして、その位置を得る。 ん~ なるほどありがとうございました。
補足
なるほどと思ったのですが、 $myArray = array(); $myArray[2] = ''; $myArray[5] = 'a'; $myArray[9] = NULL; $myArray[12] = 'z'; $myArray[1] = 'w'; 等とすると結果は「1」となります。やっぱりダメなんでしょうか??
- asuncion
- ベストアンサー率33% (2127/6289)
いろいろな方法があるとは思いますが、例えばこんな感じでしょうか。 <?php $myArray = array(); $myArray[2] = ''; $myArray[5] = 'a'; $myArray[9] = NULL; $myArray[12] = 'z'; foreach ($myArray as $key => $value) { if (end($myArray) == $value) { print "最終要素のキーは" . $key . "です。"; } } ?> (注)インデントのため、全角空白を使っています。
お礼
なるほど… foreachでキー値を得られることを知りませんでした。 勉強不足に反省… ありがとうございました。
補足
なるほどと思ったのですが、 $myArray = array(); $myArray[2] = ''; $myArray[5] = 'a'; $myArray[9] = NULL; $myArray[12] = 'z'; $myArray[1] = 'w'; 等とすると結果は「1」となります。やっぱりダメなんでしょうかね
- gogo-tea
- ベストアンサー率75% (25/33)
#1ですが追記です。 array_pop($myArraykeys)を行うと、キーだけの配列$myArraykeysから実際に最後の要素が取り除かれるので $myArraykeys = array_keys($myArray); で得たキーだけの配列$myArraykeysを他にも利用する場合は注意してください。 array_popを使う前に別名の配列を作成してコピーしておくとか。
お礼
なるほど! 配列自身をいじればわかるというわけですか。 count()じゃわからないしどうしようかと悩んでました。 簡単な方法があって助かりました。 ありがとうございました。
補足
なるほどと思ったのですが、 $myArray = array(); $myArray[2] = ''; $myArray[5] = 'a'; $myArray[9] = NULL; $myArray[12] = 'z'; $myArray[1] = 'w'; 等とすると結果は「1」となります。やっぱりダメなんでしょうか?
- gogo-tea
- ベストアンサー率75% (25/33)
//キーだけを抜き出して配列にする $myArraykeys = array_keys($myArray); //最後の要素を抜き出す $lastkey = array_pop($myArraykeys); こんな方法でどうでしょうか。
お礼
なるほど! 3つの関数を1行で書こうとしましたができないみたいなんでユーザー定義関数にしました。 $maxKey = getMaxKey_fc($myArray); function getMaxKey_fc($myArray){ ksort($myArray); $maxKey = array_pop(array_keys($myArray)); return $maxKey; } 今更ながら気付きましたが、PHPの配列はActionScriptやPerlの配列とは全く違いますね。いやこれは配列なんかじゃない!ハッシュですよね。 そう考えると全ての謎が解けた気がします。ありがとうございました。