配列の最後のキーを取得する方法
解決策は、 end
と key
(引用符) の組み合わせを使用することです。
end()
はarrayの内部ポインタを最後の要素へ進め、その値を返します。key()
は、現在の配列位置のインデックス要素を返します。だから、このようなコードの一部はトリックをする必要があります:
$array = array(
'first' => 123,
'second' => 456,
'last' => 789,
);
end($array); // move the internal pointer to the end of the array
$key = key($array); // fetches the key of the element pointed to by the internal pointer
var_dump($key);
出力します:
string 'last' (length=4)
すなわち私の配列の最後の要素のキーです。
これが行われた後、配列の内部ポインタは配列の末尾になります。コメントで指摘されているように、ポインタを配列の先頭に戻すには、配列に対して reset()
を実行することをお勧めします。
end()
が最も簡単なようですが最速じゃない。
より速く、そしてもっと強力な選択肢は array_slice()
です。
編集者による取り消し:この主張は立証されておらず、反対の証拠がコメントに記載されています。このポスターのスピード/効率に関する主張に真実の断片がある場合は、ベンチマークテストを実施する必要があります。
$last_key = key( array_slice( $array, -1, 1, TRUE ) );
私は好きです
end(array_keys($myarr))
PHP 7.3(2018)以降、これに(ついに)関数があります。 http:// php.net/manual/en/function.array-key-last.php
$array = ['Apple'=>10,'grape'=>15,'orange'=>20];
echo array_key_last ( $array )
出力します
orange
echo $array[count($array) - 1];
を使うだけです。
これが速くなるかどうかわからないが、こうする方が簡単であるように思われるので、end()に関数を渡さないことでエラーを回避できます。
それはただ変数を必要としていました…もう一行のコードを書くことは大したことではなく、必要ならばそれを設定解除してください。
$array = array(
'first' => 123,
'second' => 456,
'last' => 789,
);
$keys = array_keys($array);
$last = end($keys);
次のように array_pop と array_keys 関数を使ってみてください。
<?php
$array = array(
'one' => 1,
'two' => 2,
'three' => 3
);
echo array_pop(array_keys($array)); // prints three
?>
PHP7.3以降では、 を使って配列の最後のキー(の外側のレベル)に直接アクセスできます。 array_key_last()
これは、あなたが最終キーの値を取得せずに取得できることを意味します。
この機能は長い間遅れており、パフォーマンスを向上させ、望ましくない副作用を回避し、クリーン/ダイレクト/直感的なコードを可能にする配列機能ツールベルトへの歓迎された追加です。
これが デモです 。
$array = ["a" => "one", "b" => "two", "c" => "three"];
if (!function_exists('array_key_last')) {
echo "please upgrade to php7.3";
} else {
echo "First Key: " , key($array) , "\n";
echo "Last Key: " , array_key_last($array) , "\n";
next($array); // move array pointer to second element
echo "Second Key: " , key($array) , "\n";
echo "Still Last Key: " , array_key_last($array);
}
出力:
First Key: a
Last Key: c // <-- unaffected by the pointer position, Nice!
Second Key: b
Last Key: c // <-- unaffected by the pointer position, Nice!
いくつかのメモ:
array_key_last()
は array_key_first() の兄弟関数です。null
を返します。array_value_first()
とarray_value_last()
)もブックエンド要素へのポインタを意識しないアクセスを提供していたでしょうが、彼らは明らかに命を吹き込むのに十分な票を集めることができませんでした。新機能について説明した関連ページは次のとおりです。
これを使うことができます:
$array = array("one" => "Apple", "two" => "orange", "three" => "pear");
end($array);
echo key($array);
もう1つの解決策は、関数を作成してそれを使用することです。
function endKey($array){
end($array);
return key($array);
}
$array = array("one" => "Apple", "two" => "orange", "three" => "pear");
echo endKey($array);
私はちょうどXanderからヘルパー関数を取り、以前の答えでそれを改良しました:
function last($array){
$keys = array_keys($array);
return end($keys);
}
$arr = array("one" => "Apple", "two" => "orange", "three" => "pear");
echo last($arr);
echo $arr(last($arr));
私はまたこの問題に対する代替解決策を提供したいと思います。
すべてのキーに隙間がない数値であると仮定した場合、私の推奨する方法は、配列を数えてその値から1を引いたものです(配列キーは0から始まるという事実を説明するため)。
$array = array(0=>'dog', 1=>'cat');
$lastKey = count($array)-1;
$lastKeyValue = $array[$lastKey];
var_dump($lastKey);
print_r($lastKeyValue);
これはあなたを与えるでしょう:
int(1)猫
PHP> = 7の時点で、array_key_last()
は、配列の最後のキーを取得する最良の方法です。配列の最後のキーを取得するためだけにend()
、key()
およびreset()
の組み合わせを使用するのはとんでもないことです。
$array = array("one" => bird, "two" => "fish", 3 => "elephant");
$key = array_key_last($array);
var_dump($key) //output 3
それと比較して
end($array)
$key = key($array)
var_dump($key) //output 3
reset($array)
end()
とkey()
の組み合わせを使用している場合、ポインタが先頭にあるように配列をリセットする必要があります
$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');
list($last_key) = each(array_reverse($arr));
print $last_key;
// key3
これをarray_reverse()
で試してみてください。
$arr = array(
'first' => 01,
'second' => 10,
'third' => 20,
);
$key = key(array_reverse($arr));
var_dump($key);