配列の最後のキーを取得するにはどうすればよいですか?
配列の最後のキーを取得するにはどうすればよいですか?
回答:
解決策は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()
に、配列で実行して、ポインタを配列の先頭に戻すことができます。
reset()
) ;; しかし、あなたはその機能を指し示しているので正しいでしょう。
array('a', 'b', 'c', 'd', 'a')
には、キー0ではなく4よりも戻ります
がend()
最も簡単であるように思わ、それは最速ではありません。より速く、より強力な代替策はarray_slice()
次のとおりです。
$lastKey = key(array_slice($array, -1, 1, true));
テストが言うように、500000要素を持つ配列では、ほぼ7倍高速です!
end($arr);$key = key($arr);reset($arr);
行い、(a)と(b)を比較$key = key(array_slice($arr,-1,1,true));
したところend()
、はるかに高速になりました!end()= 0.05326秒、array_slice = 8.506秒...ハァッ??
end()
それはのような、非常に単純なC-関数から導出することができるので、最速である:int top(void){ int i; for(i = 0; stack[i] != '\0'; i++); return stack[--i]; }
last
には最後の要素への内部ポインタがあると思います。作りend()
はかなりO(1)。:-)
私は好む
end(array_keys($myarr))
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];
int top(void){ int i; for(i = 0; stack[i] != '\0'; i++); return stack[--i]; }
とします面白そうですが、時間の予算内にいるときはビジネスには適していません
$a[1] = 1; $a[5] = 5; $a[0] = 0;
、キー(1、5、0)をこの順序で持つ配列になります。 count($a)
は3となり、$a[2]
定義されていません。それは確かにあなたに5を返すことはありません。
これが高速になるかどうかはわかりませんが、このようにすると簡単に見えるようになり、関数をend()に渡さないことでエラーを回避しています...
変数が必要なだけです...コードをもう1行書くのは大したことではなく、必要に応じて設定を解除します。
$array = array(
'first' => 123,
'second' => 456,
'last' => 789,
);
$keys = array_keys($array);
$last = end($keys);
以下のようPHP7.3あなたは直接の最後のキー(の外側のレベル)を持つ配列にアクセスすることができます)(array_key_lastを
このページでの議論の多くを決定的に寝かせます。これは最高のパフォーマンスを発揮し、副作用を被ることはなく、この質問が求めるものを正確に提供するための直接的な直感的なシングルコールテクニックです。
証拠としての大まかなベンチマーク:https : //3v4l.org/hO1Yf
array_slice() + key(): 1.4 end() + key(): 13.7 array_key_last(): 0.00015
*テスト配列には500000要素が含まれ、マイクロタイムが100倍に繰り返され、平均化され、1000が掛けられて、科学的表記が回避されます。@TadejMagajnaの回答の下でコメントされた最初のベンチマークの @MAChitgarhaへのクレジット。
これは、次のコードなしで最終キーの値を取得できることを意味します。
この関数は長い間待たれており、パフォーマンスを改善し、不要な副作用を回避し、クリーン/直接/直感的なコードを可能にする配列関数ツールベルトへの歓迎すべき追加機能でした。
ここにデモがあります:
$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()
)も、ブックエンド要素へのポインタを無視したアクセスを提供しますが、明らかに、実現に十分な票を集めることに失敗しました。新機能について説明している関連ページは次のとおりです。
ps誰かが他のテクニックのいくつかを比較検討している場合は、次の比較の小さなコレクションを参照してください:(デモ)
Duration of array_slice() + key(): 0.35353660583496 Duration of end() + key(): 6.7495584487915 Duration of array_key_last(): 0.00025749206542969 Duration of array_keys() + end(): 7.6123380661011 Duration of array_reverse() + key(): 6.7875385284424 Duration of array_slice() + foreach(): 0.28870105743408
使用してみてくださいarray_popをしてarray_keysは、次のように機能します:
<?php
$array = array(
'one' => 1,
'two' => 2,
'three' => 3
);
echo array_pop(array_keys($array)); // prints three
?>
array_pop()
の戻り値で動作するarray_keys()
としない元の配列に。
PHP> = 7.3以降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()
この問題の代替ソリューションも提供したいと思います。
すべてのキーがギャップのない数値であると仮定すると、私の好ましい方法は、配列をカウントしてからその値から1を引いた数にすることです(配列キーが0で始まるという事実を説明するため)。
$array = array(0=>'dog', 1=>'cat');
$lastKey = count($array)-1;
$lastKeyValue = $array[$lastKey];
var_dump($lastKey);
print_r($lastKeyValue);
これはあなたに与えるでしょう:
int(1)猫
あなたはこれを使うことができます:
$array = array("one" => "apple", "two" => "orange", "three" => "pear");
end($array);
echo key($array);
別の解決策は、関数を作成してそれを使用することです:
function endKey($array){
end($array);
return key($array);
}
$array = array("one" => "apple", "two" => "orange", "three" => "pear");
echo endKey($array);
$arr = array('key1'=>'value1','key2'=>'value2','key3'=>'value3');
list($last_key) = each(array_reverse($arr));
print $last_key;
// key3
$array = array(
'something' => array(1,2,3),
'somethingelse' => array(1,2,3,4)
);
$last_value = end($array);
$last_key = key($array); // 'somethingelse'
PHPが$ arrayの配列ポインターを内部的に移動するため、これは機能します