web-dev-qa-db-ja.com

配列の最後のキーを取得する方法

配列の最後のキーを取得する方法

307
ajsie

解決策は、 endkey (引用符) の組み合わせを使用することです。

  • 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() を実行することをお勧めします。

581
Pascal MARTIN

end()が最も簡単なようですが最速じゃない。

より速く、そしてもっと強力な選択肢は array_slice() です。

編集者による取り消し:この主張は立証されておらず、反対の証拠がコメントに記載されています。このポスターのスピード/効率に関する主張に真実の断片がある場合は、ベンチマークテストを実施する必要があります。

$last_key = key( array_slice( $array, -1, 1, TRUE ) );
64
Tadej Magajna

私は好きです

end(array_keys($myarr))
48

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
32
Patryk Godowski

echo $array[count($array) - 1];を使うだけです。

30

これが速くなるかどうかわからないが、こうする方が簡単であるように思われるので、end()に関数を渡さないことでエラーを回避できます。

それはただ変数を必要としていました…もう一行のコードを書くことは大したことではなく、必要ならばそれを設定解除してください。

$array = array(
    'first' => 123,
    'second' => 456,
    'last' => 789, 
);

$keys = array_keys($array);
$last = end($keys);
19
Ryan Hungate

次のように array_poparray_keys 関数を使ってみてください。

<?php

$array = array(
    'one' => 1,
    'two' => 2,
    'three' => 3
);

echo array_pop(array_keys($array)); // prints three

?>
8
codaddict

PHP7.3以降では、 を使って配列の最後のキー(の外側のレベル)に直接アクセスできます。 array_key_last()

これは、あなたが最終キーの値を取得せずに取得できることを意味します。

  1. 配列ポインタを移動する(2行のコードが必要)
  2. キーの配列のソート、反転、ポップ、カウント、インデックス、またはその他の任意の配列

この機能は長い間遅れており、パフォーマンスを向上させ、望ましくない副作用を回避し、クリーン/ダイレクト/直感的なコードを可能にする配列機能ツールベルトへの歓迎された追加です。

これが デモです

$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())もブックエンド要素へのポインタを意識しないアクセスを提供していたでしょうが、彼らは明らかに命を吹き込むのに十分な票を集めることができませんでした。

新機能について説明した関連ページは次のとおりです。

5
mickmackusa

これを使うことができます:

$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);
3
Atif Tariq

私はちょうど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));
3
Steve

私はまたこの問題に対する代替解決策を提供したいと思います。

すべてのキーに隙間がない数値であると仮定した場合、私の推奨する方法は、配列を数えてその値から1を引いたものです(配列キーは0から始まるという事実を説明するため)。

$array = array(0=>'dog', 1=>'cat');

$lastKey = count($array)-1;
$lastKeyValue = $array[$lastKey];

var_dump($lastKey);
print_r($lastKeyValue);

これはあなたを与えるでしょう:

int(1)猫

3
user2732377

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()の組み合わせを使用している場合、ポインタが先頭にあるように配列をリセットする必要があります

2
Hilary Okoro
$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');
list($last_key) = each(array_reverse($arr));
print $last_key;
// key3
2
voodoo417

これをarray_reverse()で試してみてください。

 $arr = array(
     'first' => 01,
     'second' => 10,
     'third' => 20, 
 );  
 $key = key(array_reverse($arr));
 var_dump($key);
0
Vishal