key

(PHP 4, PHP 5, PHP 7, PHP 8)

key配列からキーを取り出す

説明

key(array|object $array): int|string|null

key() は、 現在の配列位置における連想配列要素のキーを返します。

パラメータ

array

配列。

戻り値

key() 関数は、内部ポインタが現在指している配列要素のキーを返します。 ポインタを移動することはありません。内部ポインタが要素リストの末尾にいる場合や配列が空の場合は key()null を返します。

変更履歴

バージョン 説明
8.1.0 この関数を object に対してコールすることは、推奨されなくなりました。 object に対して最初に get_mangled_object_vars() を使って配列に変換するか、ArrayIterator のような Iterator を実装したクラスのメソッドを使ってください。
7.4.0 SPL クラスのインスタンスは、プロパティを持たない空のオブジェクトのように扱われるようになりました。これより前のバージョンでは、この関数と同じ名前の Iterator のメソッドをコールしていました。

例1 key() の例

<?php
$array
= array(
'fruit1' => 'リンゴ',
'fruit2' => 'オレンジ',
'fruit3' => 'ブドウ',
'fruit4' => 'リンゴ',
'fruit5' => 'リンゴ');

// このループは値が "リンゴ" である
// 全ての連想配列のキーを表示します
while ($fruit_name = current($array)) {
if (
$fruit_name == 'リンゴ') {
echo
key($array), "\n";
}
next($array);
}
?>

上の例の出力は以下となります。

fruit1
fruit4
fruit5

参考

add a note add a note

User Contributed Notes 5 notes

up
380
lhardie
10 years ago
Note that using key($array) in a foreach loop may have unexpected results. 

When requiring the key inside a foreach loop, you should use:
foreach($array as $key => $value)

I was incorrectly using:
<?php
foreach($array as $value)
{
 
$mykey = key($array);
}
?>

and experiencing errors (the pointer of the array is already moved to the next item, so instead of getting the key for $value, you will get the key to the next value in the array)

CORRECT:
<?php
foreach($array as $key => $value)
{
 
$mykey = $key;
}

A noob error, but felt it might help someone else out there.
up
59
vinob44 at gmail dot com
11 years ago
Suppose if the array values are in numbers and numbers contains `0` then the loop will be terminated. To overcome this you can user like this

<?php
$array
= array(
   
'0' => '5',
   
'1' => '2',
   
'2' => '0',
   
'3' => '3',
   
'4' => '1');

// wrong approach

while ($fruit_name = current($array)) {

        echo
key($array).'<br />';
      
next($array);
}

// the way will be break loop when arra('2'=>0) because its value is '0', while(0) will terminate the loop

// correct approach
while ( ($fruit_name = current($array)) !== FALSE ) {

        echo
key($array).'<br />';
      
next($array);
}
//this will work properly
?>
up
15
FatBat
13 years ago
Needed to get the index of the max/highest value in an assoc array.
max() only returned the value, no index, so I did this instead.

<?php
reset
($x);   // optional.
arsort($x);
$key_of_max = key($x);   // returns the index.
?>
up
0
Md Tahazzot
5 years ago
(Editor note: Or just use the array_keys function)

Make as simple as possible but not simpler like this one :)

$k = array();
for($i = 0; $i < count($arr); $i++){
    $k[$i] = key($arr);
    next($arr);
}
up
-9
danielmadsv at gmail dot com
5 years ago
In addition to FatBat's response, if you'd like to find out the highest key in an array (assoc or not) but don't want to arsort() it, take a look at this:

<?php

$arr
= [ '3' => 14, '1' => 15, '4' => 92, '15' => 65 ];

$key_of_max = array_search( max($arr) , $arr);

?>
To Top