配列の最初の要素を取得します

2009年12月17日に質問されました。  ·  閲覧回数 1.5M回  ·  ソース

hsz picture
2009年12月17日

私は配列を持っています:

array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )

この配列の最初の要素を取得したいと思います。 期待される結果:文字列apple

1つの要件:参照渡しでは実行できないため、 array_shiftは適切なソリューションではありません。

これどうやってするの?

回答

blueyed picture
2010年09月23日
1425

元の答えですが、コストがかかります(O(n)):

array_shift(array_values($array));

O(1)の場合:

array_pop(array_reverse($array));

その他のユースケースなど...

$array (配列ポインタをリセットするという意味での)変更が問題にならない場合は、次を使用できます。

reset($array);

配列の「コピー」が必要な場合、これは理論的にはより効率的です。

array_shift(array_slice($array, 0, 1));

PHP 5.4以降の場合(ただし、空の場合はインデックスエラーが発生する可能性があります):

array_values($array)[0];
lepe picture
2011年11月15日
804

マイクが指摘したように(可能な限り最も簡単な方法):

$arr = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' )
echo reset($arr); // Echoes "apple"

キーを取得したい場合:(リセット後に実行してください)

echo key($arr); // Echoes "4"

PHPのドキュメントから:

混合リセット(配列&$ array );

説明:

reset()は、配列の内部ポインタを最初の要素に巻き戻し、最初の配列要素の値を返します。配列が空の場合はFALSEを返します。

Ijas Ameenudeen picture
2012年06月08日
286
$first_value = reset($array); // First element's value
$first_key = key($array); // First element's key
yoda picture
2009年12月17日
101
$arr = $array = array( 9 => 'apple', 7 => 'orange', 13 => 'plum' );
echo reset($arr); // echoes 'apple'

現在のポインタ位置を失いたくない場合は、配列のエイリアスを作成するだけです。

Tofeeq picture
2014年09月12日
97

PHPのマニュアルによると、 current($array)は配列の最初の要素を取得できます

すべての配列には、その「現在の」要素への内部ポインタがあり、配列に挿入された最初の要素に初期化されます。

したがって、配列ポインタを再配置するまで機能します。それ以外の場合は、 reset()を使用して配列をリセットする必要があります。

Sergiy Sokolenko picture
2012年04月12日
71

N番目の要素は、言語構造「list」を使用して取得できます。

// First item
list($firstItem) = $yourArray;

// First item from an array that is returned from a function
list($firstItem) = functionThatReturnsArray();

// Second item
list( , $secondItem) = $yourArray;

array_keys関数を使用すると、キーに対して同じことができます。

list($firstKey) = array_keys($yourArray);
list(, $secondKey) = array_keys($yourArray);
Samer Ata picture
2013年04月23日
54

PHP 5.4以降:

array_values($array)[0];
Alex Shesterov picture
2018年09月14日
43

PHP 7.3では、元の配列を変更せずに、一時オブジェクトを作成せずに、配列の最初と最後のキーを直接取得するための2つの関数が追加されました。

意味的に意味があることは別として、これらの関数は配列ポインターを移動しません( foreachように)。

キーを持っていると、キーによって直接値を取得できます。


例(すべてPHP 7.3以降が必要です)

最初/最後のキーと値の取得:

$my_array = ['IT', 'rules', 'the', 'world'];

$first_key = array_key_first($my_array);
$first_value = $my_array[$first_key];

$last_key = array_key_last($my_array);
$last_value = $my_array[$last_key];

配列を空にすることはできないと仮定して、最初/最後の値をワンライナーとして取得し

$first_value = $my_array[ array_key_first($my_array) ];

$last_value = $my_array[ array_key_last($my_array) ];

空の配列のデフォルトで、最初/最後の値をワンライナーとして取得します。

$first_value = empty($my_array) ? 'default' : $my_array[ array_key_first($my_array) ];

$last_value = empty($my_array) ? 'default' : $my_array[ array_key_last($my_array) ];
Lucas picture
2012年08月09日
28

仮定:

$array = array( 4 => 'apple', 7 => 'orange', 13 => 'plum' );

使用するだけ:

$array[key($array)]

最初の要素を取得する、または

key($array)

最初のキーを取得します。

または、最初のリンクを削除する場合は、リンクを解除できます。

Lee Benson picture
2012年07月23日
26

一部の配列は、 listresetcurrentなどの関数では機能しません。 たぶん、それらは「偽の」配列です。たとえば、ArrayIteratorを部分的に実装しています。

配列に関係なく最初の値をプルしたい場合は、イテレータを短絡できます。

foreach($array_with_unknown_keys as $value) break;

その後、値は$valueで使用可能になり、最初の反復後にループが中断されます。 これは、潜在的に大きな配列をarray_unshift(array_values($ arr))のような関数にコピーするよりも効率的です。

この方法でもキーを取得できます。

foreach($array_with_unknown_keys as $key=>$value) break;

これを関数から呼び出す場合は、早めに戻るだけです。

function grab_first($arr) {
    foreach($arr as $value) return $value;
}