• ベストアンサー

【PHP】配列の最後の要素のキーを知るには

以下のような乱雑な配列があったとして中身がわからない場合、最後の要素のキーが「12」であることを知るにはどうすればいいでしょうか? お詳しい方、よろしくお願いいたします。 $myArray = array(); $myArray[2] = ''; $myArray[5] = 'a'; $myArray[9] = NULL; $myArray[12] = 'z';

質問者が選んだベストアンサー

  • ベストアンサー
  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.5

数字の順番にしたいのであれば sort($myArray); としてから行えばよいかと。 ただしソート前の順番は失われるので前の順番があとで必要であれば配列をコピーして残しておいたほうがいいですね。

takosuke88
質問者

お礼

なるほど! 3つの関数を1行で書こうとしましたができないみたいなんでユーザー定義関数にしました。 $maxKey = getMaxKey_fc($myArray); function getMaxKey_fc($myArray){ ksort($myArray); $maxKey = array_pop(array_keys($myArray)); return $maxKey; } 今更ながら気付きましたが、PHPの配列はActionScriptやPerlの配列とは全く違いますね。いやこれは配列なんかじゃない!ハッシュですよね。 そう考えると全ての謎が解けた気がします。ありがとうございました。

その他の回答 (4)

  • i2719
  • ベストアンサー率35% (11/31)
回答No.4

end($myArray);//最後の要素 echo key($myArray);//のキー

takosuke88
質問者

お礼

おお! 配列にはポインターという概念があったのですね。 ポインターを末尾に動かして、その位置を得る。 ん~ なるほどありがとうございました。

takosuke88
質問者

補足

なるほどと思ったのですが、 $myArray = array(); $myArray[2] = ''; $myArray[5] = 'a'; $myArray[9] = NULL; $myArray[12] = 'z'; $myArray[1] = 'w'; 等とすると結果は「1」となります。やっぱりダメなんでしょうか??

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

いろいろな方法があるとは思いますが、例えばこんな感じでしょうか。 <?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 . "です。";   } } ?> (注)インデントのため、全角空白を使っています。

takosuke88
質問者

お礼

なるほど… foreachでキー値を得られることを知りませんでした。 勉強不足に反省… ありがとうございました。

takosuke88
質問者

補足

なるほどと思ったのですが、 $myArray = array(); $myArray[2] = ''; $myArray[5] = 'a'; $myArray[9] = NULL; $myArray[12] = 'z'; $myArray[1] = 'w'; 等とすると結果は「1」となります。やっぱりダメなんでしょうかね

  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.2

#1ですが追記です。 array_pop($myArraykeys)を行うと、キーだけの配列$myArraykeysから実際に最後の要素が取り除かれるので $myArraykeys = array_keys($myArray); で得たキーだけの配列$myArraykeysを他にも利用する場合は注意してください。 array_popを使う前に別名の配列を作成してコピーしておくとか。

takosuke88
質問者

お礼

なるほど! 配列自身をいじればわかるというわけですか。 count()じゃわからないしどうしようかと悩んでました。 簡単な方法があって助かりました。 ありがとうございました。

takosuke88
質問者

補足

なるほどと思ったのですが、 $myArray = array(); $myArray[2] = ''; $myArray[5] = 'a'; $myArray[9] = NULL; $myArray[12] = 'z'; $myArray[1] = 'w'; 等とすると結果は「1」となります。やっぱりダメなんでしょうか?

  • gogo-tea
  • ベストアンサー率75% (25/33)
回答No.1

//キーだけを抜き出して配列にする $myArraykeys = array_keys($myArray); //最後の要素を抜き出す $lastkey = array_pop($myArraykeys); こんな方法でどうでしょうか。

関連するQ&A

専門家に質問してみよう